2011-04-04 90 views
-1

我目前正試圖壓縮目錄中的所有文件。在Java中壓縮文件的問題

正在創建zip文件並且正在處理這些文件 - 但由於某些原因,這些文件沒有出現在zip文件中。

的代碼被用於完成這個任務如下:

public class FileZipper { 

    public void zipDir(String dir, String zipFileName) { 
     try{ 
      File dirObj = new File(dir); 
      ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); 
      Logger.info("Creating : " + zipFileName); 
      addDir(dirObj, out); 
      out.close(); 
     } 
     catch (Exception e){ 
      Logger.error(e, "Error zipping directory"); 
     } 
    } 

    private void addDir(File dirObj, ZipOutputStream out) throws IOException { 
     File[] files; 
     if(!dirObj.isDirectory()){ 
      files = new File[] { dirObj }; 
     } 
     else{ 
      files = dirObj.listFiles(); 
     } 
     byte[] tmpBuf = new byte[1024]; 

     for (int i = 0; i < files.length; i++) { 
      if (files[i].isDirectory()) { 
       addDir(files[i], out); 
       continue; 
      } 
      FileInputStream in = new FileInputStream(files[i].getAbsolutePath()); 
      Logger.info(" Adding: " + files[i].getAbsolutePath()); 
      out.putNextEntry(new ZipEntry(files[i].getAbsolutePath())); 
      int len; 
      while ((len = in.read(tmpBuf)) > 0) { 
       out.write(tmpBuf, 0, len); 
      } 
      out.closeEntry(); 
      in.close(); 
     } 
    } 
} 

在審查日誌信息,該目錄中的文件被發現和處理,但創建的壓縮文件不包含任何數據。

任何有關這個問題的幫助將不勝感激。

感謝

+0

請人重新打這個,郵編似乎完全無關,我 – 2011-04-04 12:05:37

+0

我道歉,裏卡多 - 是英國(略幼稚),我已經躍升到的結論是,郵政編碼是與壓縮文件相關聯的代碼 - 不是您想要發送郵件的地方。 – 2011-04-04 12:18:45

+0

沒問題,只是因爲我沒有足夠的聲望才能使用評論,否則我會自己「悄悄地」完成它:-) – 2011-04-04 14:14:19

回答

2

除了事實,即它的絕對路徑添加的文件可能不是你想要什麼,此代碼的工作對我蠻好。

+0

感謝您檢查我的代碼Joachim。我也從我的操作系統得到一個錯誤消息,說明壓縮文件夾是無效的,所以我可能必須假設它是我的計算機阻止寫入文件。 – 2011-04-04 12:14:13

+0

當我使用'.'(a.k.a當前目錄)作爲起點時,ZIP文件包含諸如'/ some/directory /./ other/stuff.txt'之類的路徑。也許你的操作系統扼殺了那個。嘗試你選擇的ZIP實用程序(WinZIP,7Zip,WinRAR,...) – 2011-04-04 12:33:50

+0

感謝您的幫助Joachim。問題在於絕對路徑 - 當我將它們改爲相對的時候,問題就解決了。 – 2011-04-04 13:30:48

1

Hy, 給這個函數一個文件名,以及一個zip名字。 它應該工作。

private void zipFiles (ArrayList<String> listWithFiles, String zipName) { 

     try { 

      byte[] buffer = new byte[1024]; 

      // create object of FileOutputStream 
      FileOutputStream fout = new FileOutputStream(zipName); 

      // create object of ZipOutputStream from FileOutputStream 
      ZipOutputStream zout = new ZipOutputStream(fout); 

      for (String currentFile : listWithFiles) { 

       // create object of FileInputStream for source file 
       FileInputStream fin = new FileInputStream(currentFile); 

       // add files to ZIP 
       zout.putNextEntry(new ZipEntry(currentFile)); 

       // write file content 
       int length; 

       while ((length = fin.read(buffer)) > 0) { 
        zout.write(buffer, 0, length); 
       } 

       zout.closeEntry(); 

       // close the InputStream 
       fin.close(); 
      } 

      // close the ZipOutputStream 
      zout.close(); 
     } catch (IOException ioe) { 
      System.out.println("IOException :" + ioe); 
     } 
    } 

所有對你很好, 丹

+0

嗨dAn。感謝您的回答。我認爲這個問題可能是我的操作系統的問題,而不是我的代碼。但是謝謝你的幫助。 – 2011-04-04 12:23:34