运行 .jar 时的 getResourceAsStream 文件路径
Posted
技术标签:
【中文标题】运行 .jar 时的 getResourceAsStream 文件路径【英文标题】:getResourceAsStream filepath while running .jar 【发布时间】:2013-04-07 07:02:37 【问题描述】:我的代码:
BufferedInputStream bis =
new BufferedInputStream(getClass().getResourceAsStream("playerhit.mp3"));
当playerhit.mp3
文件与正在运行的MP3.class
位于同一包中时,此代码可以正常工作。我将其作为.jar 运行。如果我将文件路径更改为/src/data/audio/playerhit.mp3
之类的东西,它就不再起作用了。以 .jar 运行时,是否可以访问与包的根目录不同的文件路径?
【问题讨论】:
在构建过程中playerhit.mp3
是否已复制到您的类路径中?你用什么来构建:Ant、Maven、...?
我不这么认为...而且我正在使用netbeans构建。
您是否使用“data/audio/playerhit.mp3”而不是“playerhit.mp3”?
是的,我确实使用了那个路径
将该路径放入 getResourceAsStream() 会发生什么?
【参考方案1】:
看看Javadoc for getResourceAsStream(...)
。
如果参数以/
开头,则资源的绝对名称是/
后面的名称部分。否则,绝对名称的格式如下:
modified_package_name/name
其中modified_package_name
是此对象的包名,其中/
替换为.
。
因此,如果您的 playerhit.mp3
位于包结构的根目录中,则应将其引用为 /playerhit.mp3
。如果它在/src/data/audio/
中,您可能应该使用/data/audio/playerhit.mp3
- 但请检查您的JAR 文件的内容以确定。
【讨论】:
它是/data/audio/playerhit.mp3。我尝试使用“/data/audio/”,即使直接从 netbeans 运行也无法正常工作,“./data/audio”在其他情况下也可以工作,但从 .jar 运行时则不行data
文件夹是否位于 Netbeans 的类路径中? getResourceAsStream()
方法只加载类路径上的资源。
好吧,现在我觉得自己很愚蠢。在将路径用作没有斜杠或点的“data/audio/filename.mp3”之后,我让它工作了。干杯,希望这至少对其他人有所帮助【参考方案2】:
首先检查文件是否真的在 jar 中。
检查罐子内的位置。
相对路径:当前包
绝对路径:jar 的根目录
【讨论】:
以上是关于运行 .jar 时的 getResourceAsStream 文件路径的主要内容,如果未能解决你的问题,请参考以下文章
Linux - 通过 shell 脚本运行 jar 文件时的 IO 异常