Конвертировать файл .tar.gz в .zip, используя TrueZip? - PullRequest
1 голос
/ 13 февраля 2012

Когда я призываю:

File input = new File("cmake.tar.gz");
TFile sourceFile = new TFile(input);
TFile targetFile = new TFile(File.createTempFile("cmake", ".zip"));
try
{
    TFile.cp_rp(sourceFile, targetFile, TArchiveDetector.NULL);
}
finally
{
    TFile.umount(targetFile);
}

Я получаю:

java.io.IOException: C:\Users\Gili\AppData\Local\Temp\cmake4527983120069708378.zip (not a directory)
        at de.schlichtherle.truezip.file.TBIO.cp_r0(TBIO.java:163)
        at de.schlichtherle.truezip.file.TBIO.cp_r(TBIO.java:142)
        at de.schlichtherle.truezip.file.TFile.cp_rp(TFile.java:3364)
        at com.googlecode.cmakemavenproject.GetBinariesMojo.download(GetBinariesMojo.java:275)

Как я могу дать TrueZip команду создать новый файл .zip, содержащий содержимое файла .tar.gz?

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Проблема заключается в том, что целевой архивный файл уже существует как пустой файл после того, как вы вызвали File.createTempFile (*), который будет рассматриваться как ложный положительный архивный файл ядром TrueZIP. Согласно этой логике ваш последующий вызов TFile.cp_rp (*) пытается рекурсивно скопировать виртуальный каталог в простой файл, который не может работать.

Чтобы ваш код работал, просто вызовите File.delete () для объекта, возвращаемого File.createTempFile (*). Остальная часть вашего кода должна работать.

0 голосов
/ 13 февраля 2012

Я не использовал TrueZip, но быстрое сканирование документации по API приводит меня к выводу, что вы не можете использовать TFile таким образом.Объект TFile представляет собой отдельный элемент архива.Если вы хотите скопировать все элементы, вы должны сами перебрать входные элементы и скопировать каждого из них.

Может существовать API для обработки целых архивов, но я его не видел.

...