我正在嘗試使用apache commons compress librarys創建一個'valid'tar.gz壓縮文件。創建的歸檔文件將被嵌入式設備讀取,並且必須採用相同的格式,並且具有相同的文件權限。如何在Windows中使用Java(apache compress)創建「有效」的unix TAR存檔?
如果我使用Linux創建我的文件,一切工作正常,但如果我使用Windows。該文件被拒絕。
正如您所見,存檔僅包含具有unix權限的特殊文件。這些都設置正確,如果我使用「工作」tar文件並通過gzip運行它,創建的tar.gz也可以正常工作。
我想出是唯一的區別,即非工作tar文件稍大(61代替56 KB),然後在「主機OS」 FAT代替的Unix 7zip的顯示。
任何想法,我怎麼能從Windows創建一個「真正的」tar檔案?
在此先感謝!
我現在的源代碼是:
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