0

我正在尝试将 .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/声音/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;
}

但是控制台仍然有错误:

javax.sound.sampled.AudioSystem.getAudioInputStream (Unknown Source) com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source) 处的线程“Thread-6”中的异常 java.lang.NullPointerException ) at com.chrissman.threads.AePlayWave.run(AePlayWave.java:47) java.lang.NullPointerException at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source) at javax.sound.sampled.AudioSystem.getAudioInputStream( Unknown Source) at com.chrissman.threads.AePlayWave.run(AePlayWave.java:47)

4

2 回答 2

1

in.toString()不返回用于打开流的路径,它返回类名,后跟哈希:java.io.FileInputStream@dd5b524

该错误是因为您没有java.io.FileInputStream@dd5b524在当前目录中命名的文件。

因为你得到一个对象而不是nullin找到你的文件。您不能使用File对象来获取此文件,但您可以通过对象访问它in。从流中读取内容并使用它。

于 2013-01-22T18:15:06.280 回答
0

可以使用绝对路径和相对路径查找资源。您目前拥有的是一个以 . 开头的绝对路径/。所以改成/myPackage/sounds/write.wav. 一般来说,我更喜欢绝对路径,因为很难确定哪个包是具有相对路径的“当前”包。

于 2013-01-22T18:11:06.633 回答