TrueZip создает виртуальный каталог вместо архива
У меня проблема со следующим кодом:
TFile src = new TFile(this.getMellomStasjon());
TFile dst = new TFile(this.getZipFolder()+""+zipFile+".zip");
if(dst.isDirectory())
dst = new TFile(dst, src.getName());
TFile.cp_rp(src, dst, null);
TFile file = newNonArchiveFile(dst);
if(dst.isArchive())
TFile.umount(dst);
Моя цель - поместить каталог с файлами в ZIP-архив с помощью TrueZip. Проблема в том, что код работает локально, но не на рабочем компьютере. Локально я получаю один ZIP-файл, но на производстве я получаю папку, содержащую файлы, которые я пытаюсь поместить в архив (виртуальный каталог). Я должен использовать TrueZip, потому что я архивирую содержимое более 4 ГБ.
Есть ли способ заставить TrueZip создать архив вместо (виртуального) каталога?
2 ответа
Вероятно, это не сработало, потому что артефакт JAR модуля TrueZIP Driver ZIP отсутствовал в пути класса времени выполнения.
Чтобы убедиться, что это так, вы можете сделать ZipDriver зависимостью времени компиляции, установив пользовательский TArchiveDetector. Вот пример: http://truezip.java.net/usecases/aff.html
Код, который вы показываете здесь, проблематичен. Вы, вероятно, должны исправить это:
// Call this once at application startup to make the ZipDriver a compile time
// dependency.
TFile.setDefaultArchiveDetector(
new TArchiveDetector(
"zip",
new ZipDriver(IOPoolLocator.SINGLETON)));
// Here's the work.
TFile src = new TFile(this.getMellomStasjon());
TFile dst = new TFile(this.getZipFolder(), zipFile + ".zip");
TFile.cp_rp(src, dst, TArchiveDetector.NULL);
TFile.umount(dst);
Нашел альтернативную библиотеку Apache, Commons Compression. Используя его вместо TrueZip. Кажется, поддерживает также файлы>4 ГБ.