Java获取资源相对路径

时间:2013-01-22 18:01:20

标签: java resources path relative

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

控制台:

  

找不到wave文件:java.io.FileInputStream@dd5b524

     

wave文件未发现: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;
}

但控制台仍有错误:

  

线程“Thread-6”中的异常线程“Thread-7”中的异常   java.lang.NullPointerException at   com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(未知   来源)at   javax.sound.sampled.AudioSystem.getAudioInputStream(未知来源)     在com.chrissman.threads.AePlayWave.run(AePlayWave.java:47)   java.lang.NullPointerException at   com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(未知   来源)at   javax.sound.sampled.AudioSystem.getAudioInputStream(未知来源)     在com.chrissman.threads.AePlayWave.run(AePlayWave.java:47)

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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