【问题标题】:How to load a File within a Jar that is not relative to the Class its loaded from如何在与其加载的类不相关的 Jar 中加载文件
【发布时间】:2014-06-17 05:04:01
【问题描述】:

我正在尝试加载 jar 文件中的文件。我尝试让文件加载到 BufferedReader 中。例如:

BufferedReader br = new BufferedReader(new FileReader(fileName));

fileName 是来自 Jar 文件根目录的字符串:类似于“resources/text.txt”

我很难弄清楚如何做到这一点。显然 FileReader 不会工作,因为它是从文件系统读取的。

谁能帮帮我?

【问题讨论】:

  • 除非从这个 jar 文件中加载了类,否则我能看到的唯一方法就是将其视为存档。这篇文章stackoverflow.com/questions/3369794/… 上有一个关于如何做到这一点的答案。
  • 你的类路径中有问题的 jar 吗?还是只是文件系统中的一些文件?

标签: java file jar loading


【解决方案1】:

使用类加载器获取resource as a stream

BufferedReader br = new BufferedReader(new InputStreamReader(MyClass.class.getClassLoader().getResourceAsStream("/resources/text.txt"), "utf-8");

请注意,您需要为内容指定正确的字符编码。

【讨论】:

  • 与其加载的类无关的Jar -OP
  • 也许需要澄清一下。我读到这表明该文件与正在读取的类不在同一个 jar 中,而不是资源不在类路径上。
  • 对不起,我来晚了,我有点累了。我的英语受此影响。该文件确实在 Jar 文件中,但与类无关(在 jar 文件更深处的某个数据包中)。
【解决方案2】:

如果您尝试访问与正在运行的程序相同的 jar 中的文件,您应该使用

final InputStream inputStream = ClassName.class.getResourceAsStream(fileName);

【讨论】:

  • 试过这个方法对我不起作用 :( 引发了 NullPointerException。谢谢你的努力。
  • 这可能是因为您没有使用 Brett Okken 建议的“utf-8”参数
  • 在 Class 上调用 getResourceAsStream 只会查找与使用的 Class 的包相关的资源。
猜你喜欢
  • 2023-03-12
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 2022-08-14
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
相关资源
最近更新 更多