java - 从 jar 中读取资源文件

标签 java file jar resources embedded-resource

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

File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferedReader 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,我的文件所在的文件夹位于类文件夹中。

最佳答案

而不是试图将资源寻址为 File只需询问 ClassLoader返回 InputStream通过 getResourceAsStream 获取资源:

try (InputStream in = getClass().getResourceAsStream("/file.txt");
    BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
    // Use resource
}

只要 file.txt 资源在类路径中可用,那么无论 file.txt 资源是否位于 classes/ 目录或 jar 中。

URI 不是分层的 发生是因为 jar 文件中资源的 URI 看起来像这样:file:/example.jar!/file.txt。您无法读取 jar(zip 文件)中的条目,就像它是一个普通的旧 File .

以下问题的答案很好地解释了这一点:

关于java - 从 jar 中读取资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389255/

相关文章:

java - 文件读取时执行速度差异较大

java - 各种 Log4j 类上的不同 ClassNotFoundException

java - LWJGL 3 : window doesn't show up

c++ - 如何查找和替换文本文件中的一行数据 C++

python加载几个matlab文件

java - 在 Maven 世界中获取 Spring(和其他库)

javascript - 我在这里编写了一个用于网络爬行的代码,我能够获取数据,但是准备好的语句不允许在 mysql Db 中插入数据

java - 两个不同 JTable 之间的 TableModelListener

java - 将自定义实用程序 JAR 添加到 Windows 系统路径

java - com/sun/deploy/util/WinRegistry 抛出 ClassNotFoundException Intellij Idea