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

Я создаю 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 Ответ

5 голосов
/ 18 июня 2011

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

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

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

...