其实最好的书籍就是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(); } } }