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

时间:2014-11-18 13:40:39

标签: java eclipse audio

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

在我的Java项目中,我有一个名为:SoundDir的文件夹,其中包含一个名为:sonar-beep.wav的声音文件。这是我无法访问的文件。

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

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

当我在Eclipse Debugger中运行我的程序时,输入会以Null的形式返回。我认为它没有找到文件。

关于什么是错的任何想法?

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

AudioInputStream audioIn1= AudioSystem.getAudioInputStream(input);

非常感谢您的帮助!所有这些classLoader问题都是新的。

感谢。


好的,现在已经解决了。请参阅下面的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获取null值。 我确实拥有ImageAirplanes的父目录(即“资源”),并添加到我的项目的Java Build Path中。

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:1)

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

如果您的SoundDir目录位于JAR目录的内部,那么它相对于JAR根目录,您需要使用/SoundDir/sonar-beep.wav - 请注意前导斜杠。这会使路径绝对,或相对于root

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

要更深入地了解,了解File System paths

会很有帮助