从jar中读取资源文件


狗头军师
2025-02-19 12:27:07 (5天前)

我想像这样从我的jar中读取资源:


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

//Read the file
并且在Eclipse中运行它时效果很好,但是如果我将其导出到jar中运行,则会出现IllegalArgumentException:


  1. 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,并且包含我的文件的文件夹位于类文件夹中。

2 条回复
  1. 1# v-star*위위 | 2020-08-24 16-32

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

    1. InputStream in = getClass().getResourceAsStream("/file.txt");
    2. 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。您无法读取jar(zip文件)中的条目,就像原来的File一样。

    可以通过以下答案很好地解释这一点:

    如何从Java jar文件读取资源文件?
    Java Jar文件:使用资源错误:URI不分层

登录 后才能参与评论