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 ГБ.

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