2014-07-24 73 views
0

Apache Commons壓縮庫似乎專注於將TarArchiveEntry寫入TarArchiveOutputStream。但是看起來創建TarArchiveEntry的唯一方法是使用File對象。我可以將流或字節寫入Apache Commons Compress Tarfile嗎?

我沒有要寫入Tar的文件,我在內存或最好是流中都有byte []。我不想將一堆臨時文件寫入磁盤,以便我可以構建一個tar。

有什麼辦法,我可以這樣做:

TarEntry entry = new TarEntry(int size, String filename); 
entry.write(byte[] fileContents); 
TarArchiveOutputStream tarOut = new TarArchiveOutputStream(); 
tarOut.write(entry); 
tarOut.flush(); 
tarOut.close(); 

,或者甚至更好....

InputStream nioTarContentsInputStream = ..... 
TarEntry entry = new TarEntry(int size, String filename); 
entry.write(nioTarContentsInputStream); 
TarArchiveOutputStream tarOut = new TarArchiveOutputStream(); 
tarOut.write(entry); 
tarOut.flush(); 
tarOut.close(); 

回答

1

使用下面的代碼:

byte[] test1Content = new byte[] { /* Some data */ }; 

TarArchiveEntry entry1 = new TarArchiveEntry("test1.txt"); 
entry1.setSize(test1Content.length); 

TarArchiveOutputStream out = new TarArchiveOutputStream(new FileOutputStream("out.tar")); 
out.putArchiveEntry(entry1); 
out.write(test1Content); 
out.closeArchiveEntry(); 
out.close(); 

這將構建所需的tar文件及其中的單個文件,其中的內容來自byte[]

相關問題