而不是尝试将资源作为文件寻址,只需让ClassLoader
返回资源的InputStream
,而不是通过getResourceAsStream
:
InputStream in = getClass().getResourceAsStream("/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
只要该file.txt
资源在类路径上可用,那么此方法将以相同的方式工作,而不管该file.txt
资源是位于classes/
目录中还是位于之中jar。
URI is not hierarchical发生这种情况是因为jar文件中资源的URI看起来像这样:file:/example.jar!/file.txt
。你无法读取jar(zip文件)中的条目,就像原来的File一样。