[英]Java getting resource relative path
我正在尝试将.wav文件加载到内存中,但它一直告诉我该文件不存在。
String filename;
public MyClass(String _filename){
filename = _filename;
}
public void run(){
InputStream in = View.class.getClassLoader().getResourceAsStream("/sounds/"+filename);
File inputFile = new File(in.toString());
if(!inputFile.exists()){
System.err.println("Wave file not found: " + in.toString());
return;
}
}
安慰:
找不到波形文件:java.io.FileInputStream@dd5b524
找不到波形文件:java.io.FileInputStream@570add96
该文件在包文件夹中。 在里面
myPackage / sounds / write.wav
编辑:
其实我想加载声音:
InputStream in = this.getClass().getResourceAsStream("sounds/"+filename);
AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(in);
} catch (UnsupportedAudioFileException e1) {
e1.printStackTrace();
return;
} catch (IOException e1) {
e1.printStackTrace();
return;
}
但是控制台仍然出现错误:
线程“ Thread-6”中的异常线程“ Thread-7”中的异常com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(未知源)处的java.lang.NullPointerException javax.sound.sampled.AudioSystem.getAudioInputStream(未知源) )com.chrissman.threads.AePlayWave.run(AePlayWave.java:47)com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)处的java.lang.NullPointerException(javax.sound.sampled.AudioSystem.getAudioInputStream( com.chrissman.threads.AePlayWave.run(AePlayWave.java:47)
in.toString()
不返回用于打开流的路径,它返回类名,后跟哈希: java.io.FileInputStream@dd5b524
。
该错误是因为当前目录中没有名为java.io.FileInputStream@dd5b524
的文件。
由于您得到了一个对象而不是null
in
因此找到了文件 。 您不能使用File
对象来获取此文件,但可以通过in
对象访问它。 从流中读取内容并使用它。
可以使用绝对路径和相对路径查找资源。 您当前拥有的是以/
开头的绝对路径。 因此将其更改为/myPackage/sounds/write.wav
。 通常,我更喜欢绝对路径,因为很难确定哪个包是具有相对路径的“当前”包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.