2013-12-10 42 views
0

我正在制作一个测试程序,用于在jar中进行资源加载,并且遇到问题。访问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的声音文件。

无论如何,我应该提醒你,它实际上找到的文件,但路径有无效的语法。这是路径的一个例子,我是说我在罐子的形式运行它:

文件:\ C:\ Users \用户名\研发\罐\ Test.jar的\声音\ test.wav

我试图删除“!”我仍然得到同样的错误。如果我删除“文件:”它没有找到该文件。请注意,当我在Eclipse中运行时,该程序运行良好。

+1

尝试使用Class.getResourceAsStream而不是 – MadProgrammer

+0

记住,它不需要文件,只需要输入流。 – nitind

回答

2

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

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