2011-06-01 58 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