我有一個無法訪問我的資源的可運行jar文件,它位於默認src目錄之外。根據來自What is the difference between Class.getResource() and ClassLoader.getResource()我的理解,我應該可以通過以下getResourceFile函數訪問根/ RES/IMG/img1.png(見下面的文件夾設置):Java classloader無法在jar文件中找到資源
public class Foo {
private static final ClassLoader CLASS_LOADER = Foo.class.getClassLoader();
public static File getResourceFile(String relativePath) {
// Since I'm using getClassLoader, the path will resolve starting from
// the root of the classpath and it'll take an absolute resource name
// usage: getResourceFile("img/img1.png")
// result: Exception in thread "main" java.lang.NullPointerException
return new File(CLASS_LOADER.getResource(relativePath).getFile());
}
}
文件夾設置:
root/
src/
foo/
bar/
res/
img/
img1.png
audio/
audio1.wav
當我嘗試執行jar可執行文件本身時出現問題。然而,奇怪的是,我無法通過eclipse IDE複製它,它實際上能夠正確解析路徑。我已經通過(項目 - >屬性 - > Java構建路徑 - >添加文件夾)將資源目錄添加到構建路徑,所以Java應該能夠在運行時找到資源文件夾。
在生成jar文件方面是否存在缺少的東西?開箱後的JAR文件的一切似乎是爲了與IMG和音頻目錄的根是(考慮到上述初始文件夾設置):
foo/
/bar
img/
img1.png
audio/
audio1.wav
你可以發佈'relativePath'值嗎? –
一旦進入'jar',資源不再是「文件」。如果你把它的URI放到'File'中,那麼文件將不會被找到,因爲它不在文件系統中。你應該使用它作爲輸入流,而不是文件。 – RealSkeptic
@DavidPérezCabrera:例如:img/img1.png – Alan