Разделители файлов имени пути ZipEntry?
Записи ZIP хранят полный путь к записи, потому что (я уверен в следующей части) архив ZIP не организован как каталоги. Метаданные содержат информацию о том, как файлы должны храниться (внутри каталогов).
Если я создаю ZIP файл в Windows, когда я разархивирую данные в другой ОС, например, Mac OS X, структура файла остается такой же, какой была в Windows. Это потому, что распаковщик предназначен для этого или isit, потому что файловые разделители внутри ZIP являются стандартными?
Я спрашиваю об этом, потому что я пытаюсь найти запись внутри ZIP файла, используя имя ZIP файла. Но какой разделитель файлов я должен использовать, чтобы он работал в системах, отличных от Windows?
Я использую Java, и метод: .getName()
ZipEntry
дает мне путь, используя разделитель файлов Windows \
. Было бы достаточно, если бы я использовал разделитель java File.separator
чтобы он работал на другой ОС? Или я должен попытаться найти свой файл с каждым возможным разделителем?
Упоминание почетного правильного ответа
Ответ, данный @Eren Yilmaz, является правильным, описывая функциональность многих инструментов (или даже того, который вы можете написать самостоятельно). Но, учитывая, что стандарт .zip четко документирует, каким он должен быть, правильный ответ пришлось обновить
Ответы
Ответ 1
Спецификация файла .zip гласит:
4.4.17.1 Имя файла с необязательным относительным путем. Сохраненный путь НЕ ДОЛЖЕН содержать букву диска или устройства или начальную косую черту. Все косые черты ДОЛЖНЫ быть прямыми косыми чертами '/', в отличие от обратных косых черт '\' для совместимости с файловыми системами Amiga и UNIX и т.д. Если ввод поступает со стандартного ввода, поле имени файла отсутствует.
Ответ 2
Разделитель файлов зависит от приложения, которое создает zip файл. В некоторых приложениях используется разделитель системных файлов, в то время как некоторые используют "цивилизованную" косую черту "/". Итак, если вы создаете zip файл и затем его потребляете, вы можете просто использовать косую черту в качестве разделителя файлов. Если zip файл создается в другом месте, вы должны выяснить, какой разделитель использовался. Я не знаю простой способ, но вы можете использовать грубый метод и проверять оба типа разделителя по мере продвижения.
Некоторые приложения, особенно пользовательские коды создания zip, могут смешивать разделители с разными записями zip, поэтому не забудьте проверить каждую запись.