A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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() ;
   }
  }
}
}
压缩出来的是一个错误的压缩包。怎么回事。

1 个回复

倒序浏览
新建了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应该在里面创建,
每个文件压缩后应该放到不同的压缩文件里

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马