欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java zip压缩与解压-支持空目录,保留文件修改时间,zip修改时间,java zip压缩与解

来源: javaer 分享于  点击 46362 次 点评:258

java zip压缩与解压-支持空目录,保留文件修改时间,zip修改时间,java zip压缩与解


java zip压缩与解压-支持空目录,保留文件修改时间。依赖于commons-io,commons-compress

[Java]代码 ``` javaimport java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;import org.apache.commons.io.IOUtils;

public class ZipFileUtil { / * 把一个目录打包到一个指定的zip文件中 * * @param dirpath * 目录路径 * @param zipPath * zip文件路径 */ public static void compressFoldToZip(String dirpath, String zipPath) { compressFoldToZip(dirpath,zipPath,""); } / * 把一个目录打包到一个指定的zip文件中 * @param dirpath * @param zipPath * @param entryPath 压缩内文件逻辑路径。如static/ / public static void compressFoldToZip(String dirpath, String zipPath,String entryPath){ if(!entryPath.endsWith(File.separator)&amp;&amp;StringUtil.checkNotEmpty(entryPath)){ entryPath+=File.separator; } ZipArchiveOutputStream out = null; try { out = new ZipArchiveOutputStream(new BufferedOutputStream(new FileOutputStream(new File(zipPath)))); out.setEncoding("UTF-8"); compressFoldToZip(out, dirpath, entryPath); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { IOUtils.closeQuietly(out); } } / * 把一个目录打包到一个指定的zip文件中 * * @param out * @param dirpath * 目录路径 * @param entryPath * zip中文件的逻辑路径 / private static void compressFoldToZip(ZipArchiveOutputStream out, String dirpath, String entryPath) { InputStream ins = null; File dir = new File(dirpath); File[] files = dir.listFiles(); if (files == null || files.length < 1) { return; } try {

        for (int i = 0; i < files.length; i++) {            // 判断此文件是否是一个文件夹            if (files[i].isDirectory()) {                if(files[i].listFiles().length>0){                    compressFoldToZip(out, files[i].getAbsolutePath(), entryPath + files[i].getName() + File.separator);                }else{                    addFileToZip(files[i], out, entryPath);                }            } else {                addFileToZip(files[i], out, entryPath);            }        }        out.flush();    } catch (FileNotFoundException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    } finally {        IOUtils.closeQuietly(ins);    }}private static void addFileToZip(File file, ZipArchiveOutputStream out, String entryPath) {    InputStream ins = null;    try {        String path=entryPath + file.getName();        if(file.isDirectory()){            path=formatDirPath(path); //为了在压缩文件中包含空文件夹        }        ZipArchiveEntry entry = new ZipArchiveEntry(path);        entry.setTime(file.lastModified());        // entry.setSize(files[i].length());        out.putArchiveEntry(entry);        if(!file.isDirectory()){            ins = new BufferedInputStream(new FileInputStream(file.getAbsolutePath()));            IOUtils.copy(ins, out);        }        out.closeArchiveEntry();    } catch (IOException e) {        e.printStackTrace();    } finally {        IOUtils.closeQuietly(ins);    }}/** * 解压zip文件到指定目录 *  * @param zipPath * @param destDir */public static void unZipToFold(String zipPath, String destDir) {    ZipArchiveInputStream ins = null;    OutputStream os = null;    File zip = new File(zipPath);    if (!zip.exists()) {        return;    }    File dest = new File(destDir);    if (!dest.exists()) {        dest.mkdirs();    }    destDir=formatDirPath(destDir);    try {        ins = new ZipArchiveInputStream(new BufferedInputStream(new FileInputStream(zipPath)), "UTF-8");        ZipArchiveEntry entry = null;        while ((entry = ins.getNextZipEntry()) != null) {            if (entry.isDirectory()) {                File directory = new File(destDir, entry.getName());                directory.mkdirs();                directory.setLastModified(entry.getTime());            } else {                String absPath=formatPath(destDir+entry.getName());                mkdirsForFile(absPath);                File tmpFile=new File(absPath);                os=new BufferedOutputStream(new FileOutputStream(tmpFile));                IOUtils.copy(ins, os);                IOUtils.closeQuietly(os);                tmpFile.setLastModified(entry.getTime());            }        }    } catch (FileNotFoundException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } finally {        IOUtils.closeQuietly(ins);    }}private static String formatPath(String path){    path=path.replace('\\', File.separatorChar);    path=path.replace('/', File.separatorChar);    return path;}private static String formatDirPath(String dir){    if(!dir.endsWith(File.separator)){        dir+=File.separator;    }    return dir;}private static void mkdirsForFile(String filePath){    String absPath=filePath;    String tmpPath=absPath.substring(0,absPath.lastIndexOf(File.separator));    File tmp=new File(tmpPath);    if(!tmp.exists()){        tmp.mkdirs();    }}public static void main(String[] args) {    compressFoldToZip("D:\\new2\\feiq", "D:\\zip\\my.zip");

// unZipToFold("D:\zip\my.zip", "D:\zip\unzip"); }}

```

相关栏目:

用户点评