2013-11-23 43 views
0

我這一小段代碼的Java的ZipEntry和Zipoutputstream目錄

public void doBuild() throws IOException { 
    ZipEntry sourceEntry=new ZipEntry(sourcePath); 
    ZipEntry assetEntry=new ZipEntry(assetPath); 
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream("output/"+workOn.getName().replaceAll(".bld"," ")+buildNR+".zip")); 
    out.putNextEntry(sourceEntry); 
    out.putNextEntry(assetEntry); 
    out.close(); 
    System.err.println("Build success!"); 
    increaseBuild(); 

} 

所以,如果我運行它運行槽它精細,創建的.zip和所有,但zip文件是空的。 sourceEntry和assetEntry都是目錄。我怎樣才能輕鬆地將這些目錄放到我的.zip中?

對於那些感興趣的人,這是一個MC修造系統,可以在https://bitbucket.org/makerimages/makerbuild-system找到注意:上面的代碼沒有被提交或推送到那裏!!!!!!!!

回答

0

嘗試類似這樣的東西。參數useFullFileNames指定 是否要保留您要壓縮的 文件的路徑的完整名稱。

所以,如果你有兩個文件 /dir1/dir2/a.txt/dir1/b.txt 的useFullFileNames規定,如果你想終於在 看到的zip文件的原始路徑這兩個文件或只是 兩個文件,像這樣 A.TXT在您創建的zip文件的根目錄b.txt 沒有路徑。

請注意,在我的示例中,壓縮文件 實際上被讀取,然後寫入輸出。 我想你錯過了那部分。

public static boolean createZip(String fNameZip, boolean useFullFileNames, String... fNames) throws Exception { 
     try { 
      int cntBufferSize = 256 * 1024; 
      BufferedInputStream origin = null; 
      FileOutputStream dest = new FileOutputStream(fNameZip); 
      ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest)); 
      byte bBuffer[] = new byte[cntBufferSize]; 
      File ftmp = null; 
      for (int i = 0; i < fNames.length; i++) { 
       if (fNames[i] != null) { 
        FileInputStream fi = new FileInputStream(fNames[i]); 
        origin = new BufferedInputStream(fi, cntBufferSize); 
        ftmp = new File(fNames[i]); 
        ZipEntry entry = new ZipEntry(useFullFileNames ? fNames[i] : ftmp.getName()); 
        out.putNextEntry(entry); 
        int count; 
        while ((count = origin.read(bBuffer, 0, cntBufferSize)) != -1) { 
         out.write(bBuffer, 0, count); 
        } 
        origin.close(); 
       } 
      } 
      out.close(); 
      return true; 
     } catch (Exception e) { 
      return false; 
     } 
    } 
+0

仍顯示空... – Makerimages

+0

名單在這兩個目錄中的文件名,團結兩個列表,然後通過這個統一的列表作爲使用我提供的方法/函數參數fNames值。這應該工作。 –

+0

呵呵?我這樣做http://pastebin.com/F9im3rUx – Makerimages