java如何从jar中读取资源文件?

发布于 2021-02-02 23:25:35

我想像这样从我的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,并且包含我的文件的文件夹位于类文件夹中。

关注者
0
被浏览
296
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    而不是尝试将资源作为文件寻址,只需让ClassLoader返回资源的InputStream,而不是通过getResourceAsStream

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

    只要该file.txt资源在类路径上可用,那么此方法将以相同的方式工作,而不管该file.txt资源是位于classes/目录中还是位于之中jar。

    URI is not hierarchical发生这种情况是因为jar文件中资源的URI看起来像这样:file:/example.jar!/file.txt。你无法读取jar(zip文件)中的条目,就像原来的File一样。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看