Здесь - это ZipFile
конструктор
ZipFile(File file, int mode, Charset charset) throws IOException
Как точно используются аргументы mode
и charset
?Для чего они нужны?
1) mode = ZipFile.OPEN_DELETE
Когда файл удален?
Кроме того, это не удаление отдельных файлов в zip-архиве - почему бы мне просто не удалить свой zip-файл, используя File.delete()
или File.deleteOnExit()
?
Файл будет удален некоторое время между моментом его открытия и моментом его закрытия, но его содержимое будет оставаться доступным через объект ZipFile, пока не будет вызван метод close или методвыход из виртуальной машины.
Поэтому я удаляю файл, подобный следующему:
try {
ZipFile zf = new ZipFile(new File("myZipFile.zip"), ZipFile.OPEN_DELETE);
// file name and comment are not read in this binary stream, do they?
zf.getInputStream(zf.getEntry("dirInZip/fileInsideZip.txt"));
// some operations
zf.close(); // closes InputStream and deletes myZipFile.zip ?
} catch (IOException e) {
// handling
}
2) Аргумент Charset:
Кодировка, которая будет использоваться длярасшифровывать имя записи ZIP и комментарий (игнорируется, если установлен бит кодирования языка флага бит общего назначения записи ZIP).
Я его вообще не понимаю.
Перед запуском какой-либо утилиты zip имена файлов (для архивирования) могут быть в кодировке не-UTF (теоретически в очень старых Windows это может быть кодовая страница Windows-1252 и т. Д.), Кроме того, когда я запускаю WinZip иличто-то, что я могу скопировать и вставить не-UTF-текст в качестве комментария - но разве не существует какого-то стандарта, как имена файлов и комментарии должны храниться в ZIP (я имею в виду WinZip или что-то подобное, чтобы принудительно / изменить кодировку на UTF-8 перед архивированием)?
2.1) В каком случае я мог бы ожидать имена файлов не-UTF и комментарии в Zip?
2.2) Использование myZipFile.getEntry ("dirInZip / fileInsideZip.txt") Я использую строку Java, которая является UTF16по сути, так почему я должен заботиться о кодировании?Я просто пишу что угодно в строку Java, верно?