0

Я пытаюсь создать «правильный» tar.gz-архив, используя библиотеки сжатия apache commons. Созданный архив будет считаться встроенным устройством и должен быть в том же формате с теми же правами на файлы, которые я думаю.Как создать «действительный» архив TAR Unix в Windows с Java (apache compress)?

Если я использую Linux для создания моего файла, все работает нормально, но если я использую Windows. Файл отклонен.

Как вы можете видеть, архив содержит только специальные файлы с разрешениями unix. они правильно установлены, и если я использую «рабочий» tar-файл и запускаю его через gzip, созданный tar.gz также отлично работает.

Единственное различие я понял, в том, что неработающие архивный файл немного больше (61 вместо 56 кб) и 7zip показывает в разделе «Host ОС» FAT вместо Unix.

Любые идеи, как я могу создать «настоящий» tar-архив из Windows?

Заранее благодарен!

Мой текущий исходный код является:

public static void compress(File configTar, File rcConf, File databaseTxt) 
     throws ArchiveException, IOException { 

    OutputStream tarFileStream = new GZIPOutputStream(new FileOutputStream(configTar)); 
    InputStream rcConfStream = new FileInputStream(rcConf); 
    InputStream databaseTxtStream = new FileInputStream(databaseTxt); 

    ArchiveOutputStream archiveOutputStream = new ArchiveStreamFactory() 
      .createArchiveOutputStream(ArchiveStreamFactory.TAR, tarFileStream); 

    TarArchiveEntry databaseTxtEntry = new TarArchiveEntry(databaseTxt); 
    TarArchiveEntry rcConfEntry = new TarArchiveEntry(rcConf); 

    databaseTxtEntry.setName("database.txt"); 
    databaseTxtEntry.setGroupName("root"); 
    databaseTxtEntry.setUserName("root"); 
    databaseTxtEntry.setMode(convertModeFromString("rwxr-xr-x")); 

    archiveOutputStream.putArchiveEntry(databaseTxtEntry); 
    IOUtils.copy(databaseTxtStream, archiveOutputStream); 
    archiveOutputStream.closeArchiveEntry(); 

    rcConfEntry.setName("rc.conf"); 
    rcConfEntry.setGroupName("root"); 
    rcConfEntry.setUserName("root"); 
    rcConfEntry.setMode(convertModeFromString("rw-rw-rw-")); 

    archiveOutputStream.putArchiveEntry(rcConfEntry); 
    IOUtils.copy(rcConfStream, archiveOutputStream); 
    archiveOutputStream.closeArchiveEntry(); 

    archiveOutputStream.finish(); 

    rcConfStream.close(); 
    databaseTxtStream.close(); 
    tarFileStream.close(); 
} 

Я сделал некоторые исследования и заметил разницу между заголовками TAR. Кто-нибудь может сказать, что я делаю неправильно?

Working example of file 1: 
    http://i.stack.imgur.com/S8Rbi.jpg 

NON-Working example of file 1: 
    http://i.stack.imgur.com/bdc9T.jpg 

Working example of file 2: 
    http://i.stack.imgur.com/rYhr9.jpg 

NON-Working example of file 2: 
    http://i.stack.imgur.com/4wHw3.jpg 

ответ

0

Установите cygwin или любой другой набор Unix утилит для Windows, и вызвать приложение tar командной строки.

+0

Я не хочу использовать Eny внешнюю программу. Каждый может также использовать виртуальную машину для использования Linux и создания допустимого архива, но это не то, что я хочу. Основная цель - создать архив программно внутри моего приложения. – Knutwurst

0

Вам нужно использовать другой конструктор. Я вам проверить JavaCode TarArchiveEntry

new TarArchiveEntry(file) закончится в new TarArchiveEntry(file, file.getPath())

так, если вы используете new TarArchiveEntry(file, file.getName()), что сделает его квартира

 Смежные вопросы

  • Нет связанных вопросов^_^