ZipFile(如何实现对文件和目录的压缩,解压缩?
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;public class ZipFile {public static void main(String[] args) {}/** * 文件压缩 * files:要压缩的文件 * destZip:压缩之后的zip文件所放的目录,需要"D:\"或"D:\\test"格式 * */public static void zip(String[] files, String destZip) throws IOException {FileOutputStream fos = new FileOutputStream(destZip);BufferedOutputStream bos = new BufferedOutputStream(fos);ZipOutputStream zos = new ZipOutputStream(bos);//循环读文件,压缩到zip中for (int i = 0; i < files.length; i++) {String file = files[i];FileInputStream fis = new FileInputStream(file);BufferedInputStream bis = new BufferedInputStream(fis);//获取文件名,创建条目并添加到zip中File f = new File(file);ZipEntry zl = new ZipEntry(f.getName());zos.putNextEntry(zl);//读取文件中的字节信息,压入条目int tmp = -1;while ((tmp = bis.read()) != -1) {zos.write(tmp);}zos.closeEntry();bis.close();fis.close();}zos.close();bos.close();fos.close();}/** * 文件解压缩 * zipfile:要解压缩的zip文件 * destpah:解压后文件所放的目录,需要"D:\"或"D:\\test"格式 * */public static void unzip(String zipfile, String destpath) throws IOException {FileInputStream fis = new FileInputStream("C:\\a.zip");ZipInputStream zis = new ZipInputStream(fis);ZipEntry zl = null;while ((zl = zis.getNextEntry()) != null) {if (zl.isDirectory()) {File f = new File("C:\" + zl.getName());f.mkdirs();} else {String file = zl.getName();FileOutputStream fos = new FileOutputStream(destpath + file);int tmp = -1;while ((tmp = zis.read()) != -1) {fos.write(tmp);}zis.closeEntry();fos.close();}}zis.close();}/** * 压缩目录 * zipFileName:压缩后zip文件的路径 * inputFile:需要压缩的源目录 * */public void zip(String zipFileName,String inputFile)throws Exception{File file =new File(inputFile);ZipOutputStream out =new ZipOutputStream(new FileOutputStream(zipFileName));zip(out,file,"");System.out.println("zip done");out.close();}//递归遍历子目录和文件,进行压缩private void zip(ZipOutputStream out, File f, String base) throws Exception{System.out.println("Zipping"+f.getName());if(f.isDirectory()){File[] fl=f.listFiles();out.putNextEntry(new ZipEntry(base+"/"));base = base.length()==0?"":base+"/";for(int i=0;i<fl.length;i++){zip(out,fl[i],base+fl[i].getName());}}else{out.putNextEntry(new ZipEntry(base));FileInputStream in =new FileInputStream(f);int b;while((b=in.read())!=-1){out.write(b);in.close();}}}/** * 解压缩目录 * zipFileName:需要解压缩的zip文件 * outputDirectory:解压缩后文件所放路径 * */public void unzip2(String zipFileName,String outputDirectory) throws Exception{ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));ZipEntry z;while((z=in.getNextEntry())!=null){System.out.println("unziping:"+z.getName());if(z.isDirectory()){String name=z.getName();name=name.substring(0,name.length()-1);File f=new File(outputDirectory+File.separator+name);f.mkdirs();System.out.println("mkdirs:"+outputDirectory+File.separator+name);}else{File f=new File(outputDirectory+File.separator+z.getName());f.createNewFile();FileOutputStream out=new FileOutputStream(f);int b;while((b=in.read())!=-1){out.write(b);}out.close();}}in.close();}}