我想从我的 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());
to
file = new File(getClass().getResource("/folder/file.txt").toURI());
那么它的工作原理相反(它在 jar 中工作,但在 eclipse 中不起作用)。
我正在使用 Eclipse,并且包含我的文件的文件夹位于类文件夹中。
而不是试图将资源视为File http://docs.oracle.com/javase/7/docs/api/java/io/File.html只要问类加载器 http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html返回一个输入流 http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html对于资源,而不是通过获取资源作为流 http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream%28java.lang.String%29:
try (InputStream in = getClass().getResourceAsStream("/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
// Use resource
}
只要file.txt
资源在类路径上可用,那么无论资源是否存在,此方法都将以相同的方式工作file.txt
资源位于classes/
目录或内部jar
.
The URI is not hierarchical
发生这种情况是因为 jar 文件中资源的 URI 将如下所示:file:/example.jar!/file.txt
。您无法读取 a 中的条目jar
(a zip
文件)就像是一个普通的旧文件File http://docs.oracle.com/javase/7/docs/api/java/io/File.html.
以下问题的答案很好地解释了这一点:
- 如何从 Java jar 文件中读取资源文件? https://stackoverflow.com/questions/403256/how-do-i-read-a-resource-file-from-a-java-jar-file?rq=1
- Java Jar 文件:使用资源错误:URI 不分层 https://stackoverflow.com/questions/10144210/java-jar-file-use-resource-errors-uri-is-not-hierarchical
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)