java - getResourceAsStream 返回 null

标签 java file-io resources

我正在从 Java 项目的已编译 JAR 中的包中加载文本文件。相关目录结构如下:

/src/initialization/Lifepaths.txt

我的代码通过调用 Class::getResourceAsStream 加载文件返回 InputStream

public class Lifepaths {
    public static void execute() {
        System.out.println(Lifepaths.class.getClass().
            getResourceAsStream("/initialization/Lifepaths.txt"));
    }

    private Lifepaths() {}

    //This is temporary; will eventually be called from outside
    public static void main(String[] args) {execute();}
}

无论我使用什么,打印输出总是会打印null。我不确定为什么上面的方法不起作用,所以我也尝试过:

  • “/src/initialization/Lifepaths.txt”
  • “初始化/Lifepaths.txt”
  • “Lifepaths.txt”

这些都不起作用。 I've read numerous questions到目前为止,关于这个主题,但他们都没有帮助 - 通常,他们只是说使用根路径加载文件,我已经在这样做了。或者只是从当前目录加载文件(只需加载文件名),我也尝试过。该文件正在以适当的名称编译到适当位置的 JAR 中。

如何解决这个问题?

最佳答案

Lifepaths.class.getClass().getResourceAsStream(...) 使用系统类加载器加载资源,它显然会失败,因为它看不到您的 JAR

Lifepaths.class.getResourceAsStream(...) 使用与加载 Lifepaths 类相同的类加载器加载资源,并且它应该能够访问 JAR 中的资源

调用 getResourceAsStream(name) 时,名称必须以“/”开头。我不确定这是否有必要,但没有它我就会遇到问题

关于java - getResourceAsStream 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59984966/

相关文章:

java - 如何创建文件并写入文件?

resources - 如何在 AngularJS 中添加 $resource 方法的回调

c# - 如何在 C# 中访问嵌入式 .Net 图像资源所需的示例代码

java - 如何在解析不正确的字符串时获得异常或任何类型的反馈

java - 使 Listview 在 Android 中可编辑

c - 匹配 JPEG 签名

python - 如果同时读取和追加同一个文件(python 编程),会发生什么情况?

c# - 在 .Net 中使用相对文件路径

java - 将应用程序设置为在到达时间时发送 SMS MESSAGE

java - 我的 spring 程序可以使用dispatcher-servlet.xml 运行而不使用ContextLoaderListener 和applicationcontext.xml 吗?