java - 需要帮助访问 Jar 文件中的数据文件

标签 java eclipse audio

我在读取从 Eclipse 项目导出的导出 jar 文件中的文件时遇到问题。我想在命令行上运行我的应用程序时,或者在 Eclipse 中运行相同的应用程序时访问相同的文件,并让它通过 Eclipse 内的源层次结构(即不通过 Jar 文件)访问相同的文件。

在我的 Java 项目中,我有一个名为:SoundDir 的文件夹,其中有一个名为:sonar-beep.wav 的声音文件。这是我访问时遇到问题的文件。

这是我尝试用来访问声音文件的代码行:

InputStream input = getClass().getResourceAsStream("SoundDir/sonar-beep.wav");

当我在 Eclipse 调试器中运行程序时,输入始终返回为 Null。我认为它没有找到该文件。

有什么问题的想法吗?

现在,如果这确实有效,我想使用 inputStream 作为 Java SoundPlayer 的参数来播放此数据文件中的音乐。我可以直接提供“输入”作为参数,还是需要在其之上添加 BufferedReader 或其他对象?

AudioInputStream audioIn1= AudioSystem.getAudioInputStream(input);

如果有任何帮助,我们将不胜感激!所有这些类加载器问题都是新的。

谢谢。

<小时/>

好的,现在这个问题已经解决了。请参阅 Robert 提供的以下解决方案,该解决方案对图像文件也有同样的问题。我希望我的程序能够找到它们,无论应用程序是在 Eclipse 中运行,还是在命令行上运行。

代码如下: ImageIcon imageIcon= new ImageIcon(getImageURL("/ImageAirplanes/AirplaneRtoL.png"));

这是 getImageURL 方法:

public URL getImageURL(String imageFilename) {
    URL aURL= null;

    ClassLoader cl = this.getClass().getClassLoader();

    aURL= cl.getResource(imageFilename);

     return aURL;
}

在 Eclipse 中运行程序时,我不断收到 aURL 的空值。 我确实有 ImageAirplanes 的父目录(即“Resources”),已添加到我的项目的 Java 构建路径中。

有什么想法吗?谢谢。

最佳答案

您的 SoundDir 目录位于 JAR 文件中的什么位置?试试unpacking the JAR file并检查您是否不确定。

如果您的 SoundDir 目录位于 JAR 目录的紧邻位置,那么它是相对于 JAR 根目录的,您需要使用 /SoundDir/sonar-beep.wav -注意前导斜杠。这使得路径绝对,或相对于根

如果没有斜杠,您将指定一个相对路径,它相对于类加载器 - 加载与返回的类包含在同一包中的资源getClass().

为了更深入地理解,了解File System paths是有帮助的。

关于java - 需要帮助访问 Jar 文件中的数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26995767/

相关文章:

java - 更新 OSGi 包

c - 有什么工具可以在上层建筑下重构 c 结构吗?

objective-c - 滚球Cocos2D的音效

Android debuggable=false 导致 jQuery.ajax POST 在 Cordova/Phonegap Eclipse 项目中失败

php - xdebug 不会在断点处停止

java - getAudioInputStream无法将[立体声,4字节/帧]流转换为[单声道,2字节/帧]

android - 从停止播放的时间继续播放音频

java - 如何克服 ConcurrentModificationException 错误

java - 向下滚动时 ListView 图标出现在错误的行中

java - 在 bukkit 插件中找不到主类