java - 系统找不到JAR中指定的路径

标签 java file audio jar path

我正在尝试播放音频文件。在我的IDE(intellij)中,它可以正常工作,但是在JAR中运行时,出现错误java.io.FileNotFoundException: D:\soni801\Documents\Redsea Productions\The Great X Wars\alpha-0.0.7.1.jar\audio\click.au (The system cannot find the path specified)文件在JAR中的位置是audio/click.au,而JAR位于D:\soni801\Documents\Redsea Productions\The Great X Wars\alpha-0.0.7.1.jar上,哪个afaik应该将绝对路径设置为D:\soni801\Documents\Redsea Productions\The Great X Wars\alpha-0.0.7.1.jar\audio\click.au,但是系统无法在该位置找到文件?这里发生了什么事?
这是我的AudioPlayer.java文件中的代码:

AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath() /*+ "/res"*/ + filePath).getAbsoluteFile());

Clip clip = AudioSystem.getClip();
clip.open(inputStream);
或者,您可以在GitHub repository上找到整个文件以及项目的其余部分。
感谢所有帮助。
我知道这可能是其他问题的重复,但是不幸的是其他解决方案并不能解决我的问题
如果问题不清楚,请评论我可以做的任何改进,然后我将对问题进行编辑

最佳答案

AudioSystem.getAudioInputStream方法已重载,可以接受FileURLInputStream作为参数。其中,URL通常是最佳选择。
File相比,它的优势在于URL可以寻址jar中的文件,而File无法做到。
InputStream相比,它的优点是强加了附加条件:音频文件必须支持markreset方法。我在音频文件方面的经验是,无论是否可行,都会有一定的成败。我承认我不知 Prop 体原因。
要从jar中获取URL,最简单的形式可能是以下形式:

URL url = this.getClass().getResource("yourAudioFileName");
这假定音频资源与“this”类位于同一包中。包的子文件夹也可以通过这种方式寻址。但是我不认为可以使用符号“../”从父文件夹中获取资源。
或者,您可以在音频资源的包或父包中指定一个类,而不是“this”。另外,您可以在地址前面加上“/”。在最后一种情况下,例如this.getClass().getResource("/yourAudioFileName"),项目的根源文件夹是地址的起点,而不是包含'this'的软件包。

关于java - 系统找不到JAR中指定的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63020106/

相关文章:

java - 当编译时数据模式未知时从 URL 解析 JSON 数组

java - 在自己的线程中运行每个 Spring Scheduler

java - 翻译硬编码字符串的最佳实践

iphone - 此代码是否适用于iTunes购买的AAC格式?

android - 如何通过Android中的耳机发送音频输出?

java - 在 jboss-as-7.1.1.Final 中添加数据源

file - 实现文件系统的基础

java - 使用两个数组搜索文件

python - 使用python排列文本文件

ios - SceneKit/ARKit 中的定位音频与 AudioKit