2013-04-26 75 views
2

我有3個字符串,其中每個代表一個txt文件內容,不是從計算機加載的,而是由Java生成的。如何使用字符串在java中創建Gzip存檔?

String firstFileCon = "firstContent"; //File in .gz: 1.txt 
String secondFileCon = "secondContent"; //File in .gz: 2.txt 
String thirdFileCon = "thirdContent"; //File in .gz: 3.txt 

如何創建一個GZIP文件,裏面有三個文件,並將壓縮文件保存到光盤?

+0

字符串是否保存要壓縮的文件的文件名,或者你想壓縮字符串本身嗎? – Jias 2013-04-26 19:29:32

回答

2

創建一個名爲zip文件output.zip包含文件1.txt的2.txt3.txt他們的內容字符串,請嘗試以下操作:

Map<String, String> entries = new HashMap<String, String>(); 
entries.put("firstContent", "1.txt"); 
entries.put("secondContent", "2.txt"); 
entries.put("thirdContent", "3.txt"); 

FileOutputStream fos = null; 
ZipOutputStream zos = null; 
try { 
    fos = new FileOutputStream("output.zip"); 

    zos = new ZipOutputStream(fos); 

    for (Map.Entry<String, String> mapEntry : entries.entrySet()) { 
     ZipEntry entry = new ZipEntry(mapEntry.getValue()); // create a new zip file entry with name, e.g. "1.txt" 
     entry.setMethod(ZipEntry.DEFLATED); // set the compression method 
     zos.putNextEntry(entry); // add the ZipEntry to the ZipOutputStream 
     zos.write(mapEntry.getKey().getBytes()); // write the ZipEntry content 
    } 
} catch (FileNotFoundException e) { 
    // do something 
} catch (IOException e) { 
    // do something 
} finally { 
    if (zos != null) { 
     zos.close(); 
    } 
} 

有關更多信息,請參閱Creating ZIP and JAR files,特別是章節壓縮文件

0

一般來說,GZIP僅用於壓縮單個文件(因此爲什麼java.util.zip.GZIPOutputStream只能真正支持單個條目)。

對於多個文件,我建議使用專爲多個文件(如zip)設計的格式。 java.util.zip.ZipOutputStream就是這樣。如果出於某種原因,您確實希望最終結果爲GZIP,那麼您始終可以創建一個包含所有3個文件然後是GZIP的ZIP文件。

0

目前還不清楚您是否只想存儲文本或實際的單個文件。我不認爲你可以在沒有第一次TARING的情況下將多個文件存儲在GZIP中。這裏是一個存儲字符串到GZIP的例子。也許它會幫助你:

public static void main(String[] args) { 
    GZIPOutputStream gos = null; 

    try { 
     String str = "some string here..."; 
     File myGzipFile = new File("myFile.gzip"); 

     InputStream is = new ByteArrayInputStream(str.getBytes()); 
     gos = new GZIPOutputStream(new FileOutputStream(myGzipFile)); 

     byte[] buffer = new byte[1024]; 
     int len; 
     while ((len = is.read(buffer)) != -1) { 
      gos.write(buffer, 0, len); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { gos.close(); } catch (IOException e) { } 
    } 
} 
相關問題