尝试使用 getResourceAsStream() 并失败

Sun*_*awn 1 java inputstream classloader

我正在尝试替换所有使用 Files 和 FileReaders 的实例,并用 InputStreams 和适当的读取器替换它们,以准备将应用程序打包到 jar 中 - 但是,当我尝试使用ClassLoader.getSystemClassLoader().getResourceAsStream()File 方法设法找到的相同路径时,它由于找不到文件而失败。

我使用和输出的代码:

文件中的文本:

e:Easy
definitions/easy_level_definitions.txt
h:Hard
definitions/hard_level_definitions.txt
d:Derp
definitions/derp_level_definitions.txt
Run Code Online (Sandbox Code Playgroud)

代码:

    String line;
    File f = new File("src/resources/level_sets.txt");
    BufferedReader reader1 = null;
    try {
        reader1 = new BufferedReader(new FileReader(f));
        while ((line = reader1.readLine()) != null) {
            System.out.println(line);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (reader1 != null) {
                reader1.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    line = null;
    InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("src/resources/level_sets.txt");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    try {
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出:

e:Easy
definitions/easy_level_definitions.txt
h:Hard
definitions/hard_level_definitions.txt
d:Derp
definitions/derp_level_definitions.txt
Exception in thread "main" java.lang.NullPointerException
    at java.io.Reader.<init>(Unknown Source)
    at java.io.InputStreamReader.<init>(Unknown Source)
    at Testing.main(Testing.java:34)
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

“src”文件夹仅在您的 IDE 中可用。应用打包后,它将不再存在,资源将在类路径的根目录下可用。用这个:

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("/level_sets.txt");
Run Code Online (Sandbox Code Playgroud)