运行.jar时获取getResourceAsStream文件路径

我的代码:

BufferedInputStream bis = new BufferedInputStream(getClass().getResourceAsStream("playerhit.mp3")); 

playerhit.mp3文件与运行它的MP3.class在同一个包中时,此代码可以正常工作。我将其运行为.jar。 如果我将文件路径更改为类似/src/data/audio/playerhit.mp3它就不再起作用了。 在以.jar身份运行时,是否仍然可以访问不同于文件包根目录的文件路径?

看一下getResourceAsStream(...)的Javadoc 。

如果参数以/开头,那么资源的绝对名称是/后面名称的一部分。 否则,绝对名称的格式如下: modified_package_name/name其中modified_package_name是具有/替换的此对象的包名称.

因此,如果您的playerhit.mp3位于包结构的根目录中,则应将其引用为/playerhit.mp3 。 如果它在/src/data/audio/ ,您应该使用/data/audio/playerhit.mp3 – 但要检查JAR文件的内容以确定。

首先检查文件是否实际在jar中。

检查jar子里面的位置。

相对路径:当前包

绝对路径:jar的根