繁体   English   中英

Java获取资源相对路径

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM