黑马程序员技术交流社区

标题: 关于zip压缩,大家帮我看看什么地方错了 [打印本页]

作者: 贾存双    时间: 2012-7-19 00:13
标题: 关于zip压缩,大家帮我看看什么地方错了
import java.io.* ;
import java.util.* ;
import java.util.zip.* ;
public class Demo1{
public static void main(String args[])throws Exception{
  File file = new File("e:" + File.separator) ;
  File zipFile = new File("e:" + File.separator + "test.zip") ;
  InputStream input = null ;
  ZipOutputStream zipOut = new  ZipOutputStream(new FileOutputStream(zipFile)) ;
  zipOut.setComment("hello world") ;
  fun(zipOut,file) ;
  input.close() ;  
  zipOut.close() ;
}
public static void fun(ZipOutputStream zipOut,File file){  
  if(file.isDirectory()){
   File f[] = file.listFiles() ;
   for(int i=0;i<f.length;i++){
    if(f[i].isDirectory()){
     fun(zipOut,f[i]) ;
    }else{
     try{
      zipOut.putNextEntry(new ZipEntry(f[i].getName())) ;
     }catch(Exception e){
      e.printStackTrace() ;
     }
    }
   }
  }else{
   try{
    zipOut.putNextEntry(new ZipEntry(file.getName())) ;
   }catch(Exception e){
    e.printStackTrace() ;
   }
  }
}
}
压缩出来的是一个错误的压缩包。怎么回事。
作者: 温少邦    时间: 2012-7-19 08:22
新建了ZipEntry后,要往里面写入数据嘛
把这一段:
  1. zipOut.putNextEntry(new ZipEntry(f[i].getName())) ;
复制代码
改成如下代码:
  1. zipOut.putNextEntry(new ZipEntry(f[i].getName()));
  2. FileInputStream fis=new FileInputStream(f[i]);
  3. byte[] buf=new byte[1024];
  4. int len=0;
  5. while((len=fis.read(buf))!=-1){
  6.         zipOut.write(buf,0,len);
  7. }
  8. zipOut.closeEntry();
复制代码
还有个小问题:
既然要递归压缩目录下的所有文件,
ZipOutputStream应该在里面创建,
每个文件压缩后应该放到不同的压缩文件里





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2