2011-06-01 37 views
1

我想下面寫一個java ZIP UTIL類:的Java ZipOutputStream問題

package fdbank.util; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipOutputStream; 

/** 
* 解壓縮工具類 
* @author [email protected] 
* 
*/ 
public class ZIPUtil { 

    private static void zip(File[] files, String dest) throws IOException{ 
     ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File("dest"))); 
     for(File file : files){ 
      zip(file, zos); 
     } 
     zos.close(); 
    } 

    private static void zip(File file, ZipOutputStream zos) throws IOException{ 
     byte[] buf = new byte[2048]; 
     @SuppressWarnings("unused") 
     int bytes = 0; 
     if(file.isDirectory()){ 
      ZipEntry entry = new ZipEntry(file.getName()); 
      zos.putNextEntry(entry); 
      for(File subFile : file.listFiles()){ 
       zip(subFile, zos); 
      } 
      zos.closeEntry(); 
     } 
     FileInputStream fis = new FileInputStream(file); 
     System.out.println(file.getName()); 
     ZipEntry entry = new ZipEntry(file.getName()); 
     zos.putNextEntry(entry); 
     while((bytes = fis.read(buf)) != -1){ 
      zos.write(buf); 
     } 
     zos.closeEntry(); 
     fis.close(); 
    } 



    public static void compress(int archiveType, File[] files, String dest){ 

    } 

    public static void main(String[] args){ 
     try { 
      System.out.println("gan !!!!"); 
      zip(new File[]{new File("F:\\ziptest\\1.bmp")},"c:\\ziptest.zip"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我運行它,沒有錯誤,但壓縮文件並不創造! 我的代碼有什麼問題?

回答

4

您總是寫入名爲「dest」的文件,並忽略名爲dest(值爲c:\ziptest.zip)的String參數。

用您的第一個zip()方法的第一行替換"dest"dest

另外:你一定不能忽略的fis.read()返回值:如果read()不填充緩衝區buf,那麼你必須告訴給相應的write()電話:

while((bytes = fis.read(buf)) != -1){ 
    zos.write(buf, 0, bytes); 
} 
+0

:C:d什麼是恥辱爲了我 – CaiNiaoCoder 2011-06-01 07:57:19