2012-01-30 146 views
0

我有一個Java程序,用於壓縮目錄中的所有文件和子目錄。它會創建一個絕對路徑的壓縮文件,例如c:\ dir1 \ dirzip \,但我希望它只創建具有de文件和子目錄的文件,而不是絕對路徑。 CAn anaybode請幫助我? 這是我的代碼:包含文件和子目錄的zip目錄,不包含Java中的絕對路徑

import java.io.*; 
import java.util.zip.*; 

public class zip { 

    public static void main(String argv[]) { 
     try { 

      ZipOutputStream zos = 
       new ZipOutputStream(new FileOutputStream(
        "c:\\pruebazip\\dancedragons.zip")); 

      zipDir("c:\\pruebazip\\dancedragons\\", zos); 

      zos.close(); 
     } 
     catch (Exception e) { 

     } 
    } 

    public static void zipDir(String dir2zip, ZipOutputStream zos) { 
     try { 

      File zipDir = new File(dir2zip); 
      // lista del contenido del directorio 
      String[] dirList = zipDir.list(); 
      // System.out.println(dirList[1]); 
      byte[] readBuffer = new byte[2156]; 
      int bytesIn = 0; 

      System.out.println(dirList.length); 
      // recorro el directorio y añado los archivos al zip 
      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); 

        System.out.println(filePath); 
        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) { 
      // handle exception 
     } 

    } 

} 
+0

的可能重複的[java.util.zip - 重新創建目錄結構](http://stackoverflow.com/questions/1399126/java-util-zip-recreating-directory-structure ) – McDowell 2012-01-30 14:14:58

回答

1

您的問題可能是

new ZipEntry(f.getPath()) 

仔細檢查f.getPath()是不是像C:\dir\...絕對路徑聲明。

您可能需要類似new ZipEntry(dirList[i])之類的東西。

+0

如果我這樣做,它只會添加文件,而不是子目錄ctories ... – Migua 2012-01-30 13:53:09

6

如果您想爲每個ZIP條目被存儲相對於壓縮文件夾的目錄結構,然後而不是與文件完整路徑構建的ZipEntry:

new ZipEntry(f.getPath()); 

其路徑建設社會主義相對於壓縮的目錄:

String relativePath = zipDir.toURI().relativize(f.toURI()).getPath(); 
new ZipEntry(relativePath); 
相關問題