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 создать архив вместо (виртуального) каталога?


person ScratchMyTail    schedule 29.09.2011    source источник
comment
Вы уверены, что это не так? Некоторые операционные системы представляют zip-файлы как виртуальные каталоги, по крайней мере, опционально.   -  person T.J. Crowder    schedule 29.09.2011
comment
Прежде чем я перешел на TrueZip, я использовал библиотеки по умолчанию в Java, ZipOutputStream и создавал записи. При использовании этой библиотеки все ZIP-архивы отображались как обычные файлы, а не каталоги, как сейчас при использовании TrueZip.   -  person ScratchMyTail    schedule 29.09.2011
comment
Я также пытаюсь создать файл zip-архива, но в итоге создаю каталог. Я пробую это на ОС Windows (NTFS). Вы нашли решение?   -  person Andy Dufresne    schedule 04.07.2013


Ответы (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);
person Christian Schlichtherle    schedule 01.10.2011

Найдена альтернативная библиотека Apache, Commons Compression. Использование его вместо TrueZip. Кажется, поддерживает файлы> 4gb.

person ScratchMyTail    schedule 30.09.2011