我刚刚解决了这个问题,jar中的主类无法读取文件夹的内容。 该类包含
String path = "flowers/FL8-4_zpsd8919dcc.jpg";
try {
File file = new File(TestResources.class.getClassLoader()
.getResource(path).getPath());
System.out.println(file.exists());
} catch (Exception e) {
e.printStackTrace();
}
这里sysout返回false
。
但是,当我尝试这样的东西时,它会起作用
String path = "flowers/FL8-4_zpsd8919dcc.jpg";
FileOutputStream out = null;
InputStream is = null;
try {
is = TestResources.class.getClassLoader().getResourceAsStream(path);
byte bytes[] = new byte[is.available()];
is.read(bytes);
out = new FileOutputStream("abc.jpg");
out.write(bytes);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
getResourceAsStream()
能够读取jar中文件夹的路径,但getResource()
无法读取它,
为什么会这样,这两种方法对于jar内容的读取机制有什么区别。 简单jar的内容
答案 0 :(得分:2)
getResource()
和getResourceAsStream()
都可以在jar中查找资源,它们使用相同的机制来查找资源。
但是当您从File
构建URL
表示jar中的条目时,File.exists()
将返回false
。 File
不能用于检查jar / zip中的文件是否存在。
您只能使用本地文件系统上的File.exists
(或附加到本地文件系统)。
答案 1 :(得分:0)
您需要使用an absolute path来获得您期望的行为,例如/flowers/FL8-4_zpsd8919dcc.jpg
,正如sp00m建议的那样。