java - 尝试使用 getResourceAsStream() 并失败

标签 java classloader inputstream

我正在尝试替换所有使用 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

代码:

    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();
        }
    }

输出:

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)

最佳答案

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

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("/level_sets.txt");

关于java - 尝试使用 getResourceAsStream() 并失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30981224/

相关文章:

java - 如何知道 Web 服务调用中的连接是否通过 HTTPS?

java - Velocity 有哪些先进概念?

java - 如何从列表中取出列表?

c# - Console.Read() 和 Console.ReadLine() 之间的区别?

c++ - 使用 cin.get() 获取一行文本,然后在循环中使用它来显示该行?

java - 如何用 Java 打印康威生命游戏的棋盘

java - 在 Android 应用程序中使用 Jar 时读取我自己的 Jar 的 list

Java JAR 保护

java - Eclipse 不会读取配置文件

java - Java 9 中的类加载器层次结构