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