我在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。
答案 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 。
您的套餐:
您的代码:
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