访问Java包中的文件(.wav)

时间:2012-11-12 10:29:47

标签: java audio embedded-resource javasound

我想访问项目中包中的.wav文件。

例如,我有两个包:

  • program
  • sounds

program/something.class内部我想玩sounds/asound.wav。 这怎么可能?

clip.open(AudioSystem.getAudioInputStream(new File(filename)));
clip.start();
//.... something inbetween
clip.stop();

此处filenameC:\\projects\\something\\sounds\\,但如何只提供包中asound.wav的相对路径?

3 个答案:

答案 0 :(得分:3)

使用ClassLoader.getResourceAsStream通过您用于类加载的相同基础架构加载资源。根据类加载器,它可以是目录中的文件,本地JAR文件的内容或远程资源。

getClass().getClassLoader().getResourceAsStream("asound.wav");

如方法名称所示,您将获得资源的InputStream,而不是文件。如果您认为资源可能是另一个文件的一部分,例如JAR文件,这是有道理的,因为File对象总是指向单个文件,而不是它们的一部分。

答案 1 :(得分:1)

URL url = this.getClass().getResource("/sounds/asound.wav");

当提供给从类中获取的类加载器时,/前缀将使其从包的“根”进行搜索。


然后查看Java Sound tag Wiki上显示的代码,以便加载Clip并播放它。

答案 2 :(得分:1)

正如前面提到的hereAudioSystem.getAudioInputStream(InputStream)的文档说:

  

这种方法的实施可能   需要多个解析器来检查   流确定他们是否   支持它。这些解析器必须能够   标记流,读取足够的数据   确定他们是否支持   流,如果没有,重置   stream的读指针指向其原始   位置。如果输入流没有   支持这些操作,这种方法   可能因IOException而失败。

因此解决方案将是

clip.open(AudioSystem.getAudioInputStream(
    new BufferedInputStream(getClass().getResourceAsStream("/Sounds/asound.wav"))));