zip压缩

it2022-05-05  108

package com.camelot.util.mail;

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.List;

import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;

public class PackZip {

public static void main(String[] args) {

//需要压缩得文件夹 File[] files ={ new File("C:/Users/Administrator/Desktop/1") }; //压缩后的地址 和名称 File targetFile = new File("C:/Users/Administrator/Desktop/1.zip"); //开始压缩 try { zip(files,targetFile); } catch (IOException e) { } } public static int zip(File[] files,File targetFile) throws IOException{ int flag = 0; files = toAbs(files);//String parentPath = files[0].getAbsoluteFile().getParent(); targetFile = targetFile.getAbsoluteFile();//得到绝对路径 String parentPath = files[0].getParent()+"\\";//得到父路径

files = eachFiles(files); ZipOutputStream zos = new ZipOutputStream(targetFile); zos.setEncoding("utf-8"); try{ byte[] buf = new byte[1024*1024]; for(File f:files){ zipFile(f,zos,parentPath,buf); } flag = 1; } finally{ zos.close(); } return flag ; } private static File[] toAbs(File[] files) { ArrayList<File> list = new ArrayList<>(); for(File f:files){ list.add(f.getAbsoluteFile()); } return list.toArray(new File[0]); } private static File[] eachFiles(File[] files) { List<File> list = new ArrayList<>(); LinkedList<File> tasks = new LinkedList<File>(Arrays.asList(files)); while( !tasks.isEmpty() ) { // System.out.println(tasks); File task = tasks.remove(); list.add(task); System.out.println(task+"-----开始"); if( !task.isDirectory() ) { System.out.println(task+"-----结束"); continue; } for( File c : task.listFiles() ){ tasks.add(c); } System.out.println(task+"-----结束"); } return list.toArray(new File[0]); } public static void zipFile(File f, ZipOutputStream zos, String parentPath, byte[] buf) throws IOException { String filename = f.toString().replace(parentPath, ""); if(f.isDirectory()){//关键 filename+="/"; } ZipEntry ze = new ZipEntry(filename); zos.putNextEntry(ze); try{ if(f.isFile()){ doZip(f,zos,buf); } }finally{ zos.closeEntry(); } } private static void doZip(File f, ZipOutputStream zos, byte[] buf) throws IOException { FileInputStream fis = new FileInputStream(f); int len; try{ zos.setEncoding("gbk"); while((len=fis.read(buf))!=-1){ zos.write(buf, 0, len); } }finally{ fis.close(); } }}

转载于:https://www.cnblogs.com/whb11/p/6375856.html

相关资源:c/c zip压缩解压缩

最新回复(0)