2013-07-25 2 views
1

Я пытался создать программу, которая, очевидно, открывает .zip-файл и извлекает его содержимое в .jar-файл (minecraft.jar, для modding Minecraft), но не смог найти способ открыть файл .jar в Java для этого. Открывает ли файл .jar (не запускает его) и добавляет/удаляет файлы в файле .jar?Как открыть .jar-файл в Java

+4

jar и zip - это тот же тип файла. ;) – Breavyn

+3

См. Пакет [java.util.jar] (http://docs.oracle.com/javase/7/docs/api/java/util/jar/package-summary.html). Предпочитайте его для пакета zip, потому что он имеет лучшую поддержку входа в Unicode. – McDowell

+0

@ColinGillespie № JAR сжимается с использованием ZIP, но они не являются одним и тем же типом файла. Java имеет собственные методы управления JAR. Не нужно рассматривать его как общий ZIP-файл. – m0skit0

ответ

1

Во-первых, комментарий @McDowell является корнем вашего решения: пакет java.util.jar - это то, где вы найдете нужные инструменты.

Во-вторых, изменение содержимого файла JAR на лету возможно, но сложное и довольно много работы. Было бы недостаточно для ваших целей открыть оба файла (ZIP и JAR, если я правильно понял), извлечь их во временный каталог, а затем повторно сжать весь лот?

Мне кажется, результат будет именно тем, что вы ищете. Это может занять некоторое время, но, поскольку это одноразовый, я не чувствую, что это серьезная проблема.

+0

@Nicholas Да, похоже, что это сработает. Чтобы получить все содержимое файла JAR, я должен использовать JarInputStream или JarFile? EDIT: Не могу ли я использовать JarOutputStream для записи в JAR? – n1ghtk1n9

+0

'JarInputStream' и' JarFile' очень похожи, я думаю, и это в основном зависит от вас: работаете ли вы с «File» или «InputStream»? Если 'File', я бы пошел на' JarFile'. Что касается 'JarOutputStream', я не думаю, что он поддерживает добавление записей в существующий JAR-файл - вы бы использовали его для записи всего файла, а не для изменения существующего. Возможно, вы захотите проверить, что на всякий случай я ошибаюсь. –

Смежные вопросы