我遇到了很奇怪的问题,希望你能帮到我: 我运行以下行:
InputStream stream = this.getClass().getClassLoader().getResourceAsStream(SOME_PATH);
它有效。 然后,我创建一个指向同一文件的新类加载器,然后
this.getClass().getClassLoader().getResourceAsStream(SOME_PATH)
返回null。
当我调试它时,我看到了
this.getClass().getClassLoader().getResource(SOME_PATH)
返回有效的URL对象。
所以,我调试了getResourceAsStream,看到它调用了getResource,当它试图打开steam时 - 它在FileNotFoundException上失败。
我不知道如何解决它。 流正确关闭。
任何?
答案 0 :(得分:2)
ClassLoader.getResourceAsStream()
会尝试获取URL
资源并执行resource.openStream()
。
它吞下任何IOException
并返回null
。如果您获得FileNotFoundException
,则表示首先找不到资源。
要测试此功能,请尝试:
URL resource = this.getClass().getClassLoader().getResource(SOME_PATH);
if (resource != null) {
try {
resource.openStream();
} catch (IOException e) {
e.printStackTrace();
}
}
如果您收到任何IOException
,则ClassLoader.getResource()
找不到资源或无法通过某种机会打开该资源。
我希望这会有所帮助。
答案 1 :(得分:1)
我找到了一个解决方法(注意setUseCaches):
InputStream zipStream = null;
URL resource = this.getClass().getClassLoader().getResource(SOME_PATH);
if (resource != null) {
try {
URLConnection urlConnection = resource.openConnection();
urlConnection.setUseCaches(false);
zipStream = urlConnection.getInputStream();
} catch (IOException e) {
e.printStackTrace();
NolioAction._log.error(e.getMessage(), e);
}
}