Упаковка файла в JAR, а затем перемещение в правильный каталог - PullRequest
1 голос
/ 29 марта 2012

Я везде искал это, но, похоже, не могу понять.

Я делаю приложение на Java, которое использует библиотеку Midi. Чтобы запустить это приложение, пользователь должен иметь файл SoundBank (soundbank.gm) в своей папке установки JRE в lib / audio. Я не хочу заставлять пользователя разбираться с этим самостоятельно, поэтому я надеялся, что смогу просто упаковать звуковой банк как ресурс в приложении, и когда приложение будет запущено, я могу программно переместить его в правильный каталог там не было.

Итак, сначала мне нужно знать, как упаковать ресурс, как в JAR. Тогда мне нужно знать, как скопировать ресурс в другой каталог. Я знаю, как копировать обычные файлы, но я не уверен, как я смогу получить доступ к файлу в JAR.

Любая помощь будет оценена. Я использую затмение BTW для экспорта Runnable JAR.

РЕДАКТИРОВАТЬ: Я просто выяснил, почему мой файл не был упакован в JAR, потому что я не объявил его как исходную папку в Eclipse. Теперь, как мне получить доступ к этому файлу в Java? Могу ли я просто рассматривать имя JAR как имя папки?

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Один прямой способ сделать это - получить доступ к вашему ресурсу Java в виде потока и скопировать его туда, куда вы хотите, используя, например, класс утилиты commons IOUtils:

InputStream is = MyInstallerClass.class.getResourceAsStream("/path/to/my/resource");
OutputStream os = new FileOutputStream("/path/to/install/directory");
org.apache.commons.io.IOUtils.copy(is,os);
2 голосов
/ 29 марта 2012

Чтобы получить доступ к ресурсу, упакованному в файл JAR (или просто куда-либо в пути к классам) из приложения Java, вы можете использовать:

getClass().getResourseasStream("path/to/resource");

Если ресурс находится в том же пакете, что и ваш класс, вам просто нужно имя ресурсабез какого-либо пути (например, как текущий каталог), если ресурс находится в другом пакете, вы можете использовать абсолютный путь.Посмотрите javadoc для Class.getResourseAsStream ().Получив поток, вы можете читать его, копировать и т. Д., Как обычно, с любым потоком.

1 голос
/ 29 марта 2012

Допустим, вы упаковали soundback.gm под "ресурсы" в вашем JAR.

Вы можете использовать следующее для доступа к этому файлу ...

ClassLoader cl = this.getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("resources/soundback.gm");

Вы можете затем преобразовать этот InputStream в файл через этот ...

OutputStream out = new FileOutputStream(new File("/lib/audio/soundback.gm"));

int read = 0;
byte[] bytes = new byte[1024];

while ((read = is.read(bytes)) != -1) {
   out.write(bytes, 0, read);
}

is.close();
out.flush();
out.close();
...