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