0

我正在嘗試使用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 

回答

0

安裝cygwin,對於Windows任何其他的UNIX實用工具,並呼籲tar命令行應用程序。

+0

我不想使用ENY外部程序。每個人都可以使用虛擬機來使用Linux並創建一個有效的存檔,但這不是我想要的。主要目標是在我的應用程序中編程創建一個檔案。 – Knutwurst

0

您需要使用不同的構造函數。我給你檢查JavaCode TarArchiveEntry

new TarArchiveEntry(file)最終會進入new TarArchiveEntry(file, file.getPath())

所以,如果你使用new TarArchiveEntry(file, file.getName()),這將使它平

相關問題