JAVA压缩和解压缩

来源:互联网 发布:java批量上传图片 编辑:程序博客网 时间:2024/04/27 22:49

Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作。

我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作。

ZipFile

java中的每一个压缩文件都是可以使用ZipFile来进行表示的。
        File file = new File("F:/zippath.zip");        ZipFile zipFile = new ZipFile(file);        System.out.println("压缩文件的名称为:" + zipFile.getName());

压缩单个文件

    /** 压缩单个文件*/    public static void ZipFile(String filepath ,String zippath) {    try {            File file = new File(filepath);            File zipFile = new File(zippath);            InputStream input = new FileInputStream(file);            ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));            zipOut.putNextEntry(new ZipEntry(file.getName()));            int temp = 0;            while((temp = input.read()) != -1){                zipOut.write(temp);            }            input.close();            zipOut.close();} catch (Exception e) {e.printStackTrace();}}

应用:

ZipFile("d:/hello.txt", "d:/hello.zip");

压缩多个文件(文件夹)

    /** 一次性压缩多个文件,文件存放至一个文件夹中*/    public static void ZipMultiFile(String filepath ,String zippath) {try {        File file = new File(filepath);// 要被压缩的文件夹        File zipFile = new File(zippath);        InputStream input = null;        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));        if(file.isDirectory()){            File[] files = file.listFiles();            for(int i = 0; i < files.length; ++i){                input = new FileInputStream(files[i]);                zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName()));                int temp = 0;                while((temp = input.read()) != -1){                    zipOut.write(temp);                }                input.close();            }        }        zipOut.close();} catch (Exception e) {e.printStackTrace();}}

应用:

ZipMultiFile("f:/uu", "f:/zippath.zip");

解压缩单个文件

    /**  解压缩(解压缩单个文件)*/    public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {try {        File file = new File(zippath);//压缩文件路径和文件名        File outFile = new File(outfilepath);//解压后路径和文件名        ZipFile zipFile = new ZipFile(file);        ZipEntry entry = zipFile.getEntry(filename);//所解压的文件名        InputStream input = zipFile.getInputStream(entry);        OutputStream output = new FileOutputStream(outFile);        int temp = 0;        while((temp = input.read()) != -1){            output.write(temp);        }        input.close();        output.close();} catch (Exception e) {e.printStackTrace();}}

应用:

ZipContraFile("d:/hello.zip","d:/eee.txt", "hello.txt");

 解压缩多个文件

ZipInputStream类:
当我们需要解压缩多个文件的时候,ZipEntry就无法使用了。
 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类。
    /**  解压缩(压缩文件中包含多个文件)可代替上面的方法使用。     * ZipInputStream类     * 当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,     * 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类     * */    public static void ZipContraMultiFile(String zippath ,String outzippath){    try {            File file = new File(zippath);            File outFile = null;            ZipFile zipFile = new ZipFile(file);            ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));            ZipEntry entry = null;            InputStream input = null;            OutputStream output = null;            while((entry = zipInput.getNextEntry()) != null){                System.out.println("解压缩" + entry.getName() + "文件");                outFile = new File(outzippath + File.separator + entry.getName());                if(!outFile.getParentFile().exists()){                    outFile.getParentFile().mkdir();                }                if(!outFile.exists()){                    outFile.createNewFile();                }                input = zipFile.getInputStream(entry);                output = new FileOutputStream(outFile);                int temp = 0;                while((temp = input.read()) != -1){                    output.write(temp);                }                input.close();                output.close();            }} catch (Exception e) {e.printStackTrace();}    }

应用:

        ZipContraMultiFile("f:/zippath.zip", "d:/");        ZipContraMultiFile("d:/hello.zip", "d:/");

0 0
原创粉丝点击