2011-11-08 25 views
1

我有一個問題把一個文件夾放在一個zip文件我想創建。雖然路徑是有效的,但是當我運行代碼時,它會給我一個「文件未找到異常」。 這裏是我的代碼把一個文件夾放在一個郵編在爪哇

String outFilename = "outfile.zip"; 
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename)); 
byte[] buf = new byte[1024]; 
File file = new File("workspace"); 
System.out.println(file.isDirectory()); 
System.out.println(file.getAbsolutePath()); 
FileInputStream in = new FileInputStream(file.getAbsolutePath()); 
out.putNextEntry(new ZipEntry(file.getAbsolutePath())); 
int len; 
while ((len = in.read(buf)) > 0) { 
out.write(buf, 0, len); 
} 

out.closeEntry(); 
in.close(); 
+0

你試圖添加一個空文件夾,或者你是否試圖添加一個文件夾中的所有包含文件遞歸? –

回答

1

你試圖讀取目錄字節;它不這樣工作。這個例外也是如此。

您需要添加目錄,然後在目錄中添加每個文件。如果使用文件路徑,則不需要顯式添加目錄。

我會是警惕使用絕對路徑作爲zip條目;更好地使用相對路徑,以便您可以將其解壓縮到任何位置,而不會冒險覆蓋您想要的內容。

+0

所以我需要幾乎完全重新創建目錄中的文件結構,還是隻需要執行頂層? –

+0

@JeremyKaplan你需要遞歸地旋轉目錄並分別添加每個條目。不過,這並不困難很多。 –

+1

@JeremyKaplan得到一些複製粘貼練習的人http://www.java-examples.com/create-zip-file-directory-recursively-using-zipoutputstream-example –