700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java实现单个或多个文件的压缩 解压缩 支持zip rar等格式

java实现单个或多个文件的压缩 解压缩 支持zip rar等格式

时间:2018-05-31 00:43:54

相关推荐

java实现单个或多个文件的压缩 解压缩 支持zip rar等格式

代码如下:

package .util;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.zip.CRC32;import java.util.zip.CheckedOutputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;import org.apache.tools.ant.Project;import org.apache.tools.ant.taskdefs.Expand;/*** 压缩文件工具类* @author sun.kai* 8月14日*/public class ZipUtil {static final int BUFFER = 8192;private static File zipFile;/*** 压缩单个或多文件方法* @param zipPath 压缩后的文件路径* @param srcPathName 要压缩的文件路径* 参数srcPathName也可以定义成数组形式,需调用方把参数封装到数组中传过来即可*/public static void compress(String zipPath,String... srcPathName) {//压缩后的文件对象zipFile = new File(zipPath);try {//创建写出流操作FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());ZipOutputStream out = new ZipOutputStream(cos);for(String srcPath:srcPathName){//创建需要压缩的文件对象File file = new File(srcPath);if (!file.exists()){throw new RuntimeException(srcPath + "不存在!");}/** (1)如果在zip压缩文件中不需要一级文件目录,定义String basedir = "";* 下面的compress方法中当判断文件file是目录后不需要加上basedir = basedir + file.getName() + File.separator;* (2)如果只是想在压缩后的zip文件里包含一级文件目录,不包含二级以下目录,* 直接在这定义String basedir = file.getName() + File.separator;* 下面的compress方法中当判断文件file是目录后不需要加上basedir = basedir + file.getName() + File.separator;* (3)如果想压缩后的zip文件里包含一级文件目录,也包含二级以下目录,即zip文件里的目录结构和原文件一样* 在此定义String basedir = "";* 下面的compress方法中当判断文件file是目录后需要加上basedir = basedir + file.getName() + File.separator;*///String basedir = file.getName() + File.separator;String basedir = "";compress(file, out, basedir);}out.close();} catch (Exception e) {throw new RuntimeException(e);}}private static void compress(File file, ZipOutputStream out, String basedir) {/* * 判断是目录还是文件 */if (file.isDirectory()) {basedir += file.getName() + File.separator;compressDirectory(file, out, basedir);} else {System.out.println("压缩:" + basedir + file.getName());compressFile(file, out, basedir);}}/*** 压缩一个目录*/private static void compressDirectory(File dir, ZipOutputStream out, String basedir) {if (!dir.exists()){return;}File[] files = dir.listFiles();for (int i = 0; i < files.length; i++) {/* 递归 */compress(files[i], out, basedir);}}/** * 压缩一个文件 */private static void compressFile(File file, ZipOutputStream out, String basedir) {if (!file.exists()) {return;}try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));//创建Zip实体,并添加进压缩包 ZipEntry entry = new ZipEntry(basedir + file.getName());out.putNextEntry(entry);//读取待压缩的文件并写进压缩包里int count;byte data[] = new byte[BUFFER];while ((count = bis.read(data, 0, BUFFER)) != -1) {out.write(data, 0, count);}bis.close();} catch (Exception e) {throw new RuntimeException(e);}}/*** 解压缩 * @param sourceFile 要解压缩的文件的路径* @param destDir 解压缩后的目录路径* @throws Exception*/public static void deCompress(String sourceFile,String destDir) throws Exception{ //创建需要解压缩的文件对象File file = new File(sourceFile);if (!file.exists()){throw new RuntimeException(sourceFile + "不存在!");}//创建解压缩的文件目录对象File destDiretory = new File(destDir);if(!destDiretory.exists()){destDiretory.mkdirs();}/** 保证文件夹路径最后是"/"或者"\"* charAt()返回指定索引位置的char值*/char lastChar = destDir.charAt(destDir.length()-1);if(lastChar!='/'&&lastChar!='\\'){//在最后加上分隔符destDir += File.separator;}unzip(sourceFile, destDir);}/*** 解压方法* 需要ant.jar*/private static void unzip(String sourceZip,String destDir) throws Exception{try{Project p = new Project();Expand e = new Expand();e.setProject(p);e.setSrc(new File(sourceZip));e.setOverwrite(false);e.setDest(new File(destDir));e.execute();}catch(Exception e){throw e;}}}

测试代码:

package com.test.test;import .util.ZipUtil;public class TestZip {public static void main(String[] args) throws Exception {String srcPathName1 = "C:/Users/sun/Desktop/test1/";String srcPathName2 = "C:/Users/sun/Desktop/test2/";String zipPath1 = "C:/Users/sun/Desktop/test1.zip";String zipPath = "C:/Users/sun/Desktop/test.zip";press(zipPath1,srcPathName1);press(zipPath,srcPathName1,srcPathName2);String sourceFile = "C:/Users/sun/Desktop/test.zip";String destDir = "C:/Users/sun/Desktop/test";ZipUtil.deCompress(sourceFile, destDir);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。