java在jar中加载资源文件
从分布式jar文件中加载资源(声音、图像、xml数据)的最佳方式是什么
我需要加载一些声音、图像和xml数据,以便在我的程序中使用。使用
AudioInputStream ais = AudioSystem.getAudioInputStream(new File("~/src/com/example/package/name/assets/TestSound.wav"));
不在jar中工作,原因很明显,包括src
不在jar中
编辑:
(A)MWE:http://pastebin.com/CNq6zgPw
# 1 楼答案
{}类有两个相关的方法:
getResource(path)
为类路径上的任何资源提供URLgetResourceAsStream(path)
为资源提供一个输入流李>您可以将这些方法与
AudioSystem.getAudioInputStream(...)
方法的重载一起使用,以获取读取JAR文件中资源的音频流请注意,如果在
ClassLoader
对象上调用这些方法,那么路径将在类路径上的JAR文件的名称空间中解析。。。而不是开发平台的文件系统名称空间# 2 楼答案
这段代码对我很有用:
重要的是不要将
/src/
文件夹添加到类路径中关键的变化是将
cl.getResource("/com/example/project/assets/TestSound.wav")
更改为cl.getResource("com/example/project/assets/TestSound.wav");
因为/com/...
表示路径是绝对的,而com/...
表示路径是相对的比如
返回
分别
创建的第一个文件是使用
"/Test.File"
创建的,这是绝对的。第二个是使用"Test.File"
创建的,它与eclipse中的项目根有关