无法通过URL访问.jar中的文件
我需要使用URL访问当前执行的.jar中的文件。无法通过URL访问.jar中的文件
URL url = BlockConverter.class.getResource("/test.txt");
System.out.println(url.toString());
InputStream is = url.openStream();
这就是我所做的。 输出是:
jar:file:/C:/Users/User/Desktop/SERVER/plugins/MyJar.jar!/test.txt
我的InputStream最终总是抛出一个IOException异常被初始化的时候,即使URL被正确输出。 那怎么可能? 为什么我无法打开流?
编辑: 另外,请不要用“使用的getResourceAsStream”的答案,因为它使用相同类型的代码:
public InputStream getResourceAsStream(String name) {
URL url = getResource(name);
try {
return url != null ? url.openStream() : null;
} catch (IOException e) {
return null;
}
}
我会打开它作为流直接例如
InputStream is = BlockConverter.class.getResourceAsStream("/test.txt");
,上面的方法,我通常一个罐子内访问资源的方式(它会不管它被包装罐子内打开资源,或简称为包装的部署,注)
我试过了,但是结果是一样的。除此之外,我需要记录URL,所以这看起来像是更干净的解决方案。 –
另请注意,getResourceAsStream()在其源代码中使用url.openStream(),所以它没有区别。 –
test.txt与BlockConverter的关系在哪里?以上建议它应该在jar文件的根目录下。如果你得到一个空流,我认为你的jar打包或对实体的引用是错误的 –
什么来自IOException的消息?对于这个问题,你的jar的根目录下是否有test.txt? – Powerlord
恩,非常感谢。在对代码进行一些更改后,我没有读取堆栈跟踪,结果证明文件名中的无效字符导致了IOException,而不是流。我非常感谢这个想法,我现在会去惭愧地哭泣。 –
当我说你不是第一个错过堆栈跟踪消息的人时,请相信我。不是由一个长镜头。 :P – Powerlord