我正在为jar中的资源加载制作一个测试程序,我遇到了问题。
我读过你应该使用ClassLoader
或getClass()
来访问jar中的文件。由于我用来加载资源的方法是静态的,我使用ClassLoader.getSystemResource(String path)
。
我的程序找到该文件,但表示该路径包含文件名或目录名的无效语法。这是我用来加载资源的代码:
String path = ClassLoader.getSystemResource(file).getPath();
System.out.println(path);
try {
wave = WaveData.create(new BufferedInputStream(new FileInputStream(path)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
AL10.alBufferData(buffers.get(i), wave.format, wave.data, wave.samplerate);
wave.dispose();
是的,我正在为OpenAL加载声音文件。
无论如何,我应该提醒你它实际上找到了文件,但路径的语法无效。这是我以jar形式运行时获得的路径示例:
文件:\ C:\ Users \用户名\研发\罐\ Test.jar的\声音\ test.wav
!
我试图删除“!”我仍然得到同样的错误。如果我删除“文件:”它找不到该文件。请注意,当我在Eclipse中运行时,程序运行正常。
答案 0 :(得分:2)
如果要从jar获取文件,请使用getResourceAsStream()并使用路径的包名称。
getResourceAsStream("/com/project/resources/sounds/myfile.wav")
答案 1 :(得分:0)
并非每个URL都对应于文件系统中的文件。特别是,JAR文件中的特定条目本身不是文件,因此无法使用FileInputStream读取。您可以使用Class.getResourceAsStream()
或ClassLoader.getResourceAsStream()
打开类路径资源的InputStream。