访问JAR内的资源

时间:2013-12-10 19:57:42

标签: java eclipse jar resources loading

我正在为jar中的资源加载制作一个测试程序,我遇到了问题。

我读过你应该使用ClassLoadergetClass()来访问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中运行时,程序运行正常。

2 个答案:

答案 0 :(得分:2)

如果要从jar获取文件,请使用getResourceAsStream()并使用路径的包名称。

getResourceAsStream("/com/project/resources/sounds/myfile.wav")

答案 1 :(得分:0)

并非每个URL都对应于文件系统中的文件。特别是,JAR文件中的特定条目本身不是文件,因此无法使用FileInputStream读取。您可以使用Class.getResourceAsStream()ClassLoader.getResourceAsStream()打开类路径资源的InputStream。