TrueZip - Как распаковать внутренние файлы jar/zip, не раскрывая их как каталоги?

Я создаю tzp-файл, используя TrueZip 7 и метод cp_rp, чтобы сразу добавить все содержимое каталога в tzp-файл.

После этого я пытаюсь извлечь все содержимое файла tzp в целевой каталог. Тем не менее, вызов:

zipFile = new TFile("test.zip");
public void extract(TFile file){
  for (TFile iFile : zipFile.listFiles()){
    if(iFile.isDirectory()){
       extract(iFile);
    }else{
       File output = new File(iFile.getPath());
       iFile.mv(output);
    }
  }
}

Сбой с ошибкой: java.io.IOException: [путь]\test.zip\Myjar.jar (место назначения уже существует). Если я использую cp вместо mv, то ошибка будет [path]\test.zip\Myjar.jar (содержится в [path]\test.zip\Myjar.jar)

Проблема также заключается в том, что TrueZip идентифицирует zips и jar как каталоги и архивы, поэтому при выполнении isDirectory() для них это происходит успешно, а listFiles() возвращает все файлы, содержащиеся в нем, поэтому запуск cp() выполняется для файлы рекурсивно вызывают копирование всего содержимого jar/zip в каталоги.

Как правильно извлечь эти архивные файлы без их расширения?

1 ответ

Решение

Извлечение файла архива в каталог можно выполнить одним вызовом метода:

TFile archive = new TFile("archive.zip");
TFile directory = new TFile("directory");
TFile.cp_rp(archive, directory, TArchiveDetector.NULL, TArchiveDetector.NULL);

Хитрость заключается в том, чтобы использовать TArchiveDetector.NULL при обходе деревьев каталогов.

Другие вопросы по тегам