我正在制作一个用于在 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 形式运行时得到的路径示例:
file:\C:\Users\name\development\jars\test.jar!\sounds\test.wav
我尝试删除“!”我仍然遇到同样的错误。如果我删除“文件:”,它找不到该文件。请注意,当我在 Eclipse 中运行时,该程序运行良好。
最佳答案
如果您要从 jar 中获取文件,请使用 getResourceAsStream() 并使用包名称作为路径。
getResourceAsStream("/com/project/resources/sounds/myfile.wav")
关于java - 访问 JAR 内的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20504014/