JAVA文件压缩

来源:互联网 发布:jquery数据交互 编辑:程序博客网 时间:2024/06/05 02:05

最近工作中用到了文件压缩的功能,整理了一下。文件压缩的实现,可用JDK自带的 java.util.zip.功能,但是压缩时中文会有乱码,用org.apache.tools.zip.下的jar包可解决乱码问题,也可以修改JDK中的jar包,来决绝乱码问题。

文件压缩和解压代码:

package cn.lsh.test;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import org.apache.tools.ant.taskdefs.Mkdir;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;public class FileUtil {    //文件压缩    public static void zipFiles(String zipFile,String path, File... srcFiles) throws IOException{        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile));        FileUtil.zipFiles(zos, path, srcFiles);        zos.close();        System.out.println("*********压缩完毕***********");    }    public static void zipFiles(ZipOutputStream zos,String path,File... srcFiles){        path = path.replaceAll("\\*", "/");        if(!path.endsWith("/")){            path +="/";        }        byte[] buf = new byte[1024];        try {            for(int i = 0; i < srcFiles.length; i++){                if(srcFiles[i].isDirectory()){                    File[] files = srcFiles[i].listFiles();                    String srcPath =srcFiles[i].getName();                    srcPath = srcPath.replaceAll("\\*", "/");                    if(srcPath.endsWith("/")){                        srcPath +="/";                    }                    zos.putNextEntry(new ZipEntry(srcPath+path));                    zipFiles(zos, srcPath+path, files);                }else{                    FileInputStream fis = new FileInputStream(srcFiles[i]);                    System.out.println(path+srcFiles[i].getName());                    zos.putNextEntry(new ZipEntry(path+srcFiles[i].getName()));                    int len;                    while((len = fis.read(buf)) > 0){                        zos.write(buf,0,len);                    }                    zos.closeEntry();                    fis.close();                }            }        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 解压到指定目录     * @param args     * @throws IOException     */    public static void unZipFiles(String zipPath,String descDir) throws IOException{        //可以写一些校验        unZipFiles(new File(zipPath),descDir);    }    /**     * 解压到指定目录     * @param args     * @throws IOException     */    private static void unZipFiles(File file, String descDir) {        File pathFile = new File(descDir);        if(!pathFile.exists()){            pathFile.mkdir();        }        try {            ZipFile zipFile = new ZipFile(file);            for(Enumeration entries = zipFile.getEntries();entries.hasMoreElements();){                ZipEntry zipEntry =(ZipEntry) entries.nextElement();                String zipEmtryName = zipEntry.getName();                InputStream ins = zipFile.getInputStream(zipEntry);                String outPath = (descDir+zipEmtryName).replaceAll("\\*", "/");                //判断路径是否存在                File dirFile = new File(outPath.substring(0, outPath.lastIndexOf("/")));                if(!dirFile.exists()){                    dirFile.mkdir();                }                //判断文件路径是否文件夹,若已上传,不需要解压                if(new File(outPath).isDirectory()){                    continue;                }                System.out.println(outPath);                OutputStream outs = new FileOutputStream(outPath);                byte[] buf1 = new byte[1024];                int len;                while((len=ins.read(buf1))>0){                    outs.write(buf1,0,len);                }                ins.close();                outs.close();            }        } catch (IOException e) {            e.printStackTrace();        }        System.out.println("****************解压完毕**************");    }    //test    public static void main(String[] args) throws IOException{        /*File[] files =new File[]{            new File("D:/Test/9527.xlsx"),            new File("D:/Test/罗顺侯.docx"),            new File("D:/Test/京北方.doc")        };*/        /*String path = "D:/Test";        File[] files = new File(path).listFiles();        String zipFile ="D:/Test/压缩.zip";        zipFiles(zipFile, "abc", files);*/        //解压测试        File zipFile = new File("D:/Test/压缩.zip");        String descDir = "D:/Test/zipfile/";        unZipFiles(zipFile, descDir);    }}