我无法读取我从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中。
有什么想法吗?感谢。
答案 0 :(得分:1)
您的SoundDir目录位于JAR文件中的哪个位置?尝试unpacking the JAR file并检查您是否不确定。
如果您的SoundDir目录位于JAR目录的内部,那么它相对于JAR根目录,您需要使用/SoundDir/sonar-beep.wav
- 请注意前导斜杠。这会使路径绝对,或相对于root
如果没有斜杠,则指定相对路径,相对于类加载器 - 加载与返回的类包含在同一包中的资源getClass()
。
要更深入地了解,了解File System paths
会很有帮助