从jar中读取资源文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我想从我的jar中读取资源,如下所示:

File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferredReader reader = new BufferedReader(new FileReader(file));

//Read the file

它在Eclipse中运行时工作正常,但如果将其导出到jar,则运行它会出现IllegalArgumentException:

Exception in thread "Thread-2"
java.lang.IllegalArgumentException: URI is not hierarchical

我真的不知道为什么,但如果我改变了一些测试,我会发现

file = new File(getClass().getResource("/file.txt").toURI());

file = new File(getClass().getResource("/folder/file.txt").toURI());

那么它的工作原理相反(它在jar中工作,但不是eclipse)。

我正在使用Eclipse,并且包含我的文件的文件夹是一个类文件夹。

提问于
用户回答回答于

InputStream in = getClass().getResourceAsStream("/file.txt"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

只要file.txt资源在类路径中可用,那么无论file.txt资源是在classes/目录中还是在a中,这种方法都会以相同的方式工作jar

URI is not hierarchical发生这种情况是因为jar文件中的资源的URI看起来像这样:file:/example.jar!/file.txt。您无法读取jarzip文件)中的条目,例如它是普通的旧文件。

用户回答回答于

如果你想作为一个文件阅读,我相信还有一个类似的解决方案:

    ClassLoader classLoader = getClass().getClassLoader();
    File file = new File(classLoader.getResource("file/test.xml").getFile());

扫码关注云+社区