Получить список файлов из ZIP
Есть байт-код zip файла. Необходимо получить список файлов в архиве. Смотрел спецификацию — пока очень сумбурно все. Решил глянуть код в хекс редакторе, обратил внимание, что все файлы в архиве описаны в конце архива. Вот выдержка из кода тестового архива:
Код:
04 00 00 80 08 00 00 0C 00 18 00 00 00 00 00 00 00 00 00 B4 81 00 00 00 00 50 65 72 73 6F 6E 2E 63 6C 61 73 73 55 54 05 00 03 8A 44 71 52 75 78 0B 00 01 04 E8 03 00 00 04 E8 03 00 00 50 4B 01 02 1E 03 14 00 00 00 08 00 53 71 61 43 77 E4 43 50 16 7D 0A 00 BC C4 0A 00 08 00 18 00 00 00 00 00 00 00 00 00 B4 81 76 04 00 00 74 65 73 74 2E 67 69 66 55 54 05 00 03 3E 9A 73 52 75 78 0B 00 01 04 E8 03 00 00 04 E8 03 00 00 50 4B 05 06 00 00 00 00 02 00 02 00 A0 00 00 00 CE 81 0A 00 00 00
. ´. Person.classUT. DqRux. è. è. PK. SqaCwäCP.>..¼Ä. ´.v. test.gifUT. >.sRux. è. è. PK. . Î…
Подскажите, как обработать архив, чтобы получить список файлов в нем
- Вопрос задан более трёх лет назад
- 6147 просмотров
- Вконтакте

Ну и собственно пример выше, разобранный чуть подробнее:
Надеюсь это помогло, если остались вопросы — задавайте, я в своё время немало головной боли помел с зип-файлами.
Как прочитать все файлы ".java" из файла ".zip"
Я хочу получить все .java файлы и поместить их в ArrayList файлов. Я взял ZipInputStream , а затем ZipEntry для перебора файлов, но не могу понять, как получить файлы из ZipEntry .
4 ответа
Вот код, который может читать и распечатывать файлы .java в zip-файлах:
Вы также можете получить файл и его содержимое, используя этот код.
Может быть, вы можете напрямую использовать файл, как показано ниже:
Пожалуйста, проверьте с этим кодом
Если вы хотите получить список файлов, которые вы позже просмотрите, то сначала вам нужно где-нибудь извлечь файлы. В других ответах есть примеры того, как получить входной поток и затем записать его на диск, поэтому я не буду повторять это.
После того, как вы извлечете файлы, вы можете заполнить свой список ссылками на них.
Постскриптум Я предполагаю, что вы делаете это для проекта или чего-то еще, но в целом такие инструменты, как Sonarqube, хороши для статического анализа кода.
Как получить список файлов архива 7z?
Проверьте, что путь к 7z.exe прописан в переменной окружения PATH , без этого даже из командной строки вы будете получать ошибку, или укажите путь явно в команде.
Проверьте, что у пользователя, от имени которого запускается программа достаточно прав на чтение архива и запись файла в соответствующую папку.
Укажите пути к файлам явно и полностью. Я не любитель абсолютных путей, но с этого стоит начать, т.к. относительные пути иногда ведут не туда, куда вы предполагаете. Если вариант с полными путями сработает, можно начинать искать ошибки в относительных путях.
Для процесса можно, а часто нужно, явно задать рабочую директорию, тогда проблем с относительными путями будет на порядок меньше.
Нашел в чем проблема с вашим кодом, но это не отменяет всего описанного выше.
Команда 7z l my.zip > my.txt для CMD или PowerShell абсолютно верная, но ее нельзя просто засунуть в аргументы запуска процесса, т.к. по сути в этой записи не одна а две команды: команда для архиватора 7z l my.zip — вывести список файлов и команда для консоли > my.txt — перенаправить вывод в файл.
Таким образом нам нужно в коде реализовать тоже самое, т.е. запустить процесс процесс для архиватора, с его параметрами и перенаправить вывод в файл.