У меня есть сценарий для архивирования некоторых файлов и папок (с подпапками). Мне удалось добиться этого с помощью библиотеки Apache Commons Compress с помощью < href="https://stackoverflow.com/a/26745529/3942769">этот пост. У меня есть приложение, которое использует java.util.zip
< /a> библиотека для распаковки файла. Эта утилита не может прочитать заархивированную папку Apache Commons Compress, самый первый ZipEntry
равен нулю.
Однако, когда сжатый файл подготовлен с помощью WinZip, утилита без проблем распаковывает его.
Я также пытался разархивировать сжатый zip-файл с помощью WinZip, он выдает ошибку - Невозможно открыть локальный заголовок для «имя файла». Любая идея, как добавить локальные заголовочные файлы? Я проверил исходный код на наличие ZipArchiveOutputStream
, он записывает в локальный файл заголовка.
Любые указатели на эту проблему? Распакуйте код ниже:
{
File destDir = new File(destDirectory);
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
ZipEntry entry = zipIn.getNextEntry();
// iterates over entries in the zip file
while (entry != null) {
String filePath = destDirectory + File.separator + entry.getName();
if (!entry.isDirectory()) {
// if the entry is a file, extracts it
extractFile(zipIn, filePath, CurrentSize, totalSize);
} else {
// if the entry is a directory, make the directory
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
}
Однако я могу видеть, что в zip-файле есть записи другими способами, но, к сожалению, не могу включить новый код в утилиту. Фрагмент кода:
ZipFile zipFile = new ZipFile(new File(zipFilePath));
Enumeration entries = zipFile.entries();
while(entries.hasMoreElements()) {
ZipEntry ze = (ZipEntry) entries.nextElement();
System.out.println(ze.getName());
if(!ze.isDirectory())
System.out.println("Is not a directory");
}