2010-10-20 60 views
0

我有一個Java程序如下,用於壓縮文件夾作爲一個整體。出現在壓縮文件中的文件路徑

public static void zipDir(String dir2zip, ZipOutputStream zos) 

{ 

try 

{ 

      File zipDir= new File(dir2zip); 

      String[] dirList = zipDir.list(); 

      byte[] readBuffer = new byte[2156]; 

      int bytesIn = 0; 

     for(int i=0; i<dirList.length; i++) 

     { 

     File f = new File(zipDir, dirList[i]); 

     if(f.isDirectory()) 

     { 

        String filePath = f.getPath(); 

      zipDir(filePath, zos); 

     continue; 

    } 

      FileInputStream fis = new FileInputStream(f); 

      ZipEntry anEntry = new ZipEntry(f.getPath()); 

       zos.putNextEntry(anEntry); 

     while((bytesIn = fis.read(readBuffer)) != -1) 

     { 

      zos.write(readBuffer, 0, bytesIn); 

     } 

     fis.close(); 

    } 

} 

catch(Exception e) 

{ 

e.printStackTrace(); 

} 


} 

public static void main(){ 
String date=new java.text.SimpleDateFormat("MM-dd-yyyy").format(new java.util.Date()); 

     ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("Output/" + date + "_RB" + ".zip")); 

     zipDir("Output/" + date + "_RB", zos); 

     zos.close(); 
} 

我的查詢在這裏。要壓縮的目標文件夾(+日期+ _RB)存在於名爲Output的文件夾中。壓縮成功後,當我提取壓縮文件時,我找到一個文件夾Output,其中存在(+ date + _RB)所需的文件夾。在提取壓縮文件後,我不需要該Output文件夾,而應該直接單獨提取所需的文件夾。請告知。

UPDATE:

我試圖Isaac的答案。提取生成的zip文件時,沒有提取文件夾。只有所有文件夾內的文件纔會被提取。我只是不需要在生成的zip文件中單獨的「輸出」文件夾。但是該程序的功能是,它不會提取Output文件夾中的所有其他文件夾,而只是提取這些文件夾中的文件。請告知如何進行......

回答

2

它發生,因爲這樣的:

的ZipEntry anEntry =新的ZipEntry(f.getPath());

f.getPath()將在字符串的開始處返回Output/。這是由於程序的流程以及它(錯誤)如何使用File對象。

我建議您構造tmp叫,說一個文件對象:

File tmp = new File(dirList[i]); 

變化的f建設:

File f = new File(zipDir, tmp.getPath()); 

然後,改變這種:

ZipEntry anEntry = new ZipEntry(f.getPath()); 

對此:

ZipEntry anEntry = new ZipEntry(tmp.getPath()); 

我沒有時間去真正地測試它,但簡而言之,你的問題是由於如何構建File對象造成的。

+0

請查看我更新的問題 – LGAP 2010-10-21 16:00:42

+0

現在,發生這種情況是因爲您沒有在ZIP中包含目錄條目。將此添加到'f.isDirectory()'條件:'zos.putNextEntry(new ZipEntry(filePath))'。 – Isaac 2010-10-21 17:50:41

+0

對不起,我不能讓你艾薩克!你能更簡單地解釋我嗎? – LGAP 2010-10-22 16:19:18

相關問題