Я использую Netbeans и пытаюсь выяснить, как я могу поместить все свои библиотеки, музыку, изображения и т. Д. В один файл JAR для распространения.Я думаю, что у меня есть библиотеки, но аудио, изображения и другие подобные файлы доставляют мне проблемы.
В моем текущем проекте у меня есть аудиофайл, который я тоже хочу встроить в файл JAR.Сначала я попробовал one-jar
, но через пару часов я отказался от него.Я поместил аудио файл в файл JAR просто отлично, но я не могу получить к нему доступ из моей программы.Я знаю, что мне нужно использовать getResourceAsStream
как предложено здесь , но мне неясно, что я делаю после получения входного потока.Единственный способ заставить его работать, это использовать InputStream
и создать новый файл (см. Ниже ... и он работает), , но создание нового файла кажется пустой тратой (и я не хочу, чтобы люди видели аудиофайл во время работы моей программы). Нет ли способа прямого доступа к аудиофайлу, пока он еще содержится в файле .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», которая содержит myAudio.wav
и 3.) папка META-INF
, которая содержит мою manifest.mf
.
EDIT
Аудиопоток читается примерно так.Я пытался использовать InputStream
напрямую, но не добился успеха.Я хочу еще раз подчеркнуть, что он у меня уже есть, когда я создаю новый аудиофайл из входного потока аудиофайла, содержащего файл JAR
, но, как я уже говорил ранее, создание большого аудиофайла каждый раз кажется пустой тратой.время запуска программы, когда файл уже существует в JAR
.Этот файл отдыха - это то, чего я пытаюсь избежать.
AudioInputStream stream;
Clip music;
try {
stream = AudioSystem.getAudioInputStream(file);
} catch (IOException e) {
} catch (UnsupportedAudioFileException e) {
}
try {
music = AudioSystem.getClip();
} catch (LineUnavailableException e) {
}
try {
start();
} catch (Exception e) {
}
public void start() throws Exception {
music.open((AudioInputStream) stream);
music.start();
music.loop(Clip.LOOP_CONTINUOUSLY);
}