java文件压缩ZipOutPutStream

其实最好的书籍就是javaAPI

1.创建ZipOutPutStream流,利用BufferedOutputStream提个速.

2.新建zip方法,用来压缩文件,传参

3.zip方法利用putNextEntry来将目录点写入

4.递归目录数组

5.写入数据,关闭流

 

/**
 * 压缩
 * @author BinPeng
 * @date 2019/8/6 18:19
 */
public class Zip18 {
    public static void main(String[] args) throws IOException {
        compreSsion("F:\\test.zip",new File("F:\\test"));//第一个参数是压缩的名字,第二个参数是要压缩的目录
    }
    private static void compreSsion(String zipFileName, File target) throws IOException {//压缩
        System.out.println("压缩文件...");
        ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
        BufferedOutputStream bos=new BufferedOutputStream(out);
        zip(out,target,target.getName(),bos);
        bos.close();
        out.close();
        System.out.println("压缩完成");
    }

    private static void zip(ZipOutputStream zout, File target, String name, BufferedOutputStream bos) throws IOException {
        //判断是不是目录
        if (target.isDirectory()){
          File[] files=target.listFiles();
          if (files.length==0){//空目录
              zout.putNextEntry(new ZipEntry(name+"/"));
            /*  开始编写新的ZIP文件条目,并将流定位到条目数据的开头。
              关闭当前条目,如果仍然有效。 如果没有为条目指定压缩方法,
              将使用默认压缩方法,如果条目没有设置修改时间,将使用当前时间。*/
          }
          for (File f:files){
              //递归处理
              zip(zout,f,name+"/"+f.getName(),bos);
          }
        }else {
                zout.putNextEntry(new ZipEntry(name));
                InputStream inputStream=new FileInputStream(target);
                BufferedInputStream bis=new BufferedInputStream(inputStream);
                byte[] bytes=new byte[1024];
                int len=-1;
                while ((len=bis.read(bytes))!=-1){
                    bos.write(bytes,0,len);
                }
                bis.close();

        }

    }

}

  


posted @ 2019-08-07 17:40  三只坚果  阅读(13916)  评论(0编辑  收藏  举报