当前位置: 首页 > 知识库问答 >
问题:

GetResourceStream返回null

潘宪
2023-03-14

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

/src/initialization/Lifepaths.txt

我的代码通过调用Class::GetResourceStream来加载文件,以返回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”

这两个都不起作用。到目前为止,我已经读了很多关于这个主题的问题,但是没有一个是有用的--通常,他们只是说使用根路径加载文件,我已经在做了。或者只从当前目录加载文件(只加载filename),我也试过。该文件正在用适当的名称编译到位于适当位置的JAR中。

我怎么解决这个?

共有2个答案

澹台星剑
2023-03-14

规则如下:

  1. 检查要加载到JAR中的文件的位置(因此也要确保它实际上已添加到JAR)
  2. 使用绝对路径:路径从JAR的根开始
  3. 使用相对路径:路径从要调用getResource/getResoucReasStream的类的包目录开始

并尝试:

Lifepaths.class.getResourceAsStream("/initialization/Lifepaths.txt")

而不是

Lifepaths.class.getClass().getResourceAsStream("/initialization/Lifepaths.txt")

(不确定这是否有区别,但前者将使用正确的类加载器/JAR,而后者我不确定)

吴丁雷
2023-03-14

LifePaths.class.GetClass().GetResourceAsStream(...)使用系统类加载器加载资源,它显然失败了,因为它看不到您的JAR

Lifepaths.class.GetResourceStream(...)使用加载Lifepaths类的同一个类加载器加载资源,并且它应该可以访问JAR中的资源

 类似资料:
  • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

  • 我有两个活动和两个布局。当我在第一个活动中显示列表时,一切都正常,并在单击时给出列表中项目的编号,但当我尝试在第二个活动中重复相同的内容时,它会告诉我RecycleServiceClickListener侦听器为空。 适配器: 第一项活动: 第二项活动: 错误: 我不明白为什么在第一种情况下,它正常处理单击,而在第二种情况下,它说RecyclerViewClickListener为null

  • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方

  • 我想在下面返回JSON。 {“名字”:“杰基”} 新来的春靴在这里。1天大。有没有合适的方法可以做到这一点?

  • 加载样式表,并在用户单击按钮时将其应用于场景 调用getScene()返回null。 函数所在的类是场景的控制器和根节点,我使用SceneBuilder 2.0,并将类设置为加载fxml的控制器,它是一个。 问题代码是类中的一个成员函数,标记是这样的,我可以通过设置按钮来调用它。 完整的代码可以在https://github.com/SebastianTroy/FactorioManufactur

  • 问题内容: 我创建了一个自定义错误类型来包装错误,以便更轻松地在Golang中进行调试。当有打印错误时它可以工作,但是现在引起了恐慌。 演示版 当我调用一个函数时,它不会返回错误,我仍然应该能够包装该错误。 预期的行为是,如果错误为nil,则应该简单地忽略它,不幸的是,它会做相反的事情。 我希望它能打印出来。而是即使错误为nil也会打印。 问题答案: 正在将err变量与nil进行比较,但实际上它是