在一个JAR文件中包含Java程序的所有库,音频等

时间:2011-04-28 07:57:10

标签: java netbeans audio jar getresource

我正在使用Netbeans,我正在试图弄清楚如何将所有库,音乐,图像等放在一个JAR文件中进行分发。我想我已经找到了库,但是音频,图像和其他类似的文件给我带来了麻烦。

在我当前的项目中,我有一个音频文件,我想嵌入JAR文件中。首先我尝试了one-jar,但几个小时后我放弃了它。我把音频文件放到JAR文件中就好了,但我无法从我的程序中访问它。我知道我需要按照建议使用getResourceAsStream here但我不清楚在获得输入流后我做了什么。我可以看到让它工作的唯一方法是使用InputStream并创建一个全新的文件(见下图......它可以工作),但创建一个新文件似乎是浪费< / strong>(我不希望人们看到我的程序运行时出现音频文件)。 如果音频文件仍包含在.JAR文件中,是否无法直接访问音频文件?

File file = new File("myAudio.wav");
InputStream stream = mypackage.MyApp.class.getResourceAsStream("audio/myAudio.wav");
        try {
            OutputStream out = new FileOutputStream(file);
            byte buf[] = new byte[1024];
            int len;
            while ((len = inputStream.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            out.close();
            inputStream.close();
        } catch (IOException e) {
        }

修改

我的JAR文件的内部结构包含1.)一个库包(Jama),2。)我的包是我的类文件的直接父包,一个名为“audio”的文件夹包含{{ 1}}和3.)myAudio.wav文件夹,其中包含我的META-INF

修改

音频流的读取方式如下。我试图直接使用manifest.mf,但我没有成功。我想再次指出,当我从包含InputStream文件的音频文件的输入流创建一个新的音频文件时,我已经拥有它了,但就像我之前说的那样,创建一个大音频似乎是浪费文件已存在于JAR时,每次运行程序时都会生成文件。这个文件娱乐是我想要避免的。

JAR

1 个答案:

答案 0 :(得分:3)

AudioSystem.getAudioInputStream(stream);不适合你?