FileInputStream查看Jar的根目录

时间:2013-12-16 14:13:00

标签: java io fileinputstream

我在com.nishu.ld28.utilities包中的类中有一个FileInputStream,我想访问文件夹Sounds中的声音文件,该文件不在com.nishu.ld28包中。我像这样指定加载路径:

"sounds/merry_xmas.wav"

然后尝试加载它:

new BufferedInputStream(new FileInputStream(path))

当我导出jar时,我运行它的命令行提示符说它无法找到该文件。我知道如何在Eclipse中运行程序时访问这些文件,但是当我导出它时,我无法弄清楚如何将FileInputStream指向Sounds文件夹。

编辑:根据要求,这是我的代码:

public void loadSound(String path)  {
    WaveData data = null;
    data = WaveData.create(GameSound.class.getClassLoader().getResourceAsStream(path));
    int buffer = alGenBuffers();
    alBufferData(buffer, data.format, data.data, data.samplerate);
    data.dispose();
    source = alGenSources();
    alSourcei(source, AL_BUFFER, buffer);
}

WaveData接受InputStream或其他类型的IO。

2 个答案:

答案 0 :(得分:2)

您不需要FileInputStream,因为您没有从文件系统中读取。使用ClassLoader.getResourceAsStream(String res)InputStream返回的Class.getResourceAsStream(String res)。所以要么

in = ClassLoader.getResourceAsStream("sounds/merry_xmas.wav");

in = getClass().getResourceAsStream("/sounds/merry_xmas.wav");

请注意第二个示例中的前导斜杠。

答案 1 :(得分:0)

我会将com.nishu.ld28.utilities放在您班级的同一个套餐中,我们称之为 MyClass

您的套餐:

enter image description here

您的代码:

package com.nishu.ld28.utilities;

import java.io.InputStream;

public class MyClass {

   public static void main(String[] args) {
      InputStream is = MyClass.class.getResourceAsStream("sound/merry_xmas.wav");

      System.out.format("is is null ? => %s", is==null);
   }
}

<强>输出

is is null ? => false