• java打包压缩文件


    package com.it.simple.util;

    import java.io.BufferedOutputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.Writer;
    import java.util.Enumeration;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
    import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
    import org.apache.commons.compress.archivers.zip.ZipFile;
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.io.IOUtils;
    import org.apache.commons.lang.StringUtils;

    /***
    * 将压缩文件写出页面web下载
    * @架包 commons-compress-1.8.jar
    *
    */
    public class ZipFileUtils{

    public static void main(String[] args) throws FileNotFoundException, Exception {
    /*ZipFileUtils main = new ZipFileUtils("c:/test1.zip");
    main.createZipOut();
    main.packToolFiles("D:/444", "444");
    main.closeZipOut();*/

    /*main = new Main("c:/test2.zip");
    main.createZipOut();
    main.packToolFiles("C:/test", "test");
    main.closeZipOut();
    Main.unZipToFolder("c:/test1.zip", "c:/test1");
    Main.unZipToFolder("c:/test2.zip", "c:/test2");
    */
    }
    private OutputStream out = null;
    private BufferedOutputStream bos = null;
    private ZipArchiveOutputStream zaos = null;
    private String zipFileName = null;

    public ZipFileUtils(String zipname,HttpServletResponse response) {
    this.zipFileName = zipname;
    try{
    String fileName = "文件打包下载_"+System.currentTimeMillis()+".zip";
    response.setHeader("content-disposition", "attachment;filename=""
    + new String(fileName.getBytes("gb2312"), "iso8859-1") + """);
    //response.setContentType("APPLICATION/octet-stream");
    response.setContentType("multipart/form-data");
    out = response.getOutputStream();
    }catch(Exception e){
    }

    }

    public void createZipOut() throws FileNotFoundException, IOException {
    // File f = new File(zipFileName);
    // out = new FileOutputStream(f);
    bos = new BufferedOutputStream(out);
    zaos = new ZipArchiveOutputStream(bos);
    zaos.setEncoding("GBK");
    }

    public void closeZipOut() throws Exception {
    zaos.flush();
    zaos.close();

    bos.flush();
    bos.close();

    out.flush();
    out.close();

    }

    /**
    * 把一个目录打包到zip文件中的某目录
    * @param dirpath 目录绝对地址
    * @param pathName zip中目录
    */
    public void packToolFiles(String dirpath, String pathName) throws FileNotFoundException, IOException {
    if (StringUtils.isNotEmpty(pathName)) {
    pathName = pathName + File.separator;
    }
    packToolFiles(zaos, dirpath, pathName);
    }

    /**
    * 把一个目录打包到一个指定的zip文件中
    * @param dirpath 目录绝对地址
    * @param pathName zip文件抽象地址
    */
    public void packToolFiles(ZipArchiveOutputStream zaos, String dirpath, String pathName) throws FileNotFoundException, IOException {

    ByteArrayOutputStream tempbaos = new ByteArrayOutputStream();
    BufferedOutputStream tempbos = new BufferedOutputStream(tempbaos);

    File dir = new File(dirpath);
    //返回此绝对路径下的文件
    File[] files = dir.listFiles();
    if (files == null || files.length < 1) {
    return;
    }
    for (int i = 0; i < files.length; i++) {
    //判断此文件是否是一个文件夹
    if (files[i].isDirectory()) {
    packToolFiles(zaos, files[i].getAbsolutePath(), pathName + files[i].getName() + File.separator);
    } else {
    zaos.putArchiveEntry(new ZipArchiveEntry(pathName + files[i].getName()));
    IOUtils.copy(new FileInputStream(files[i].getAbsolutePath()), zaos);
    zaos.closeArchiveEntry();
    }

    }

    tempbaos.flush();
    tempbaos.close();

    tempbos.flush();
    tempbos.close();
    }

    /**
    * 把一个zip文件解压到一个指定的目录中
    * @param zipfilename zip文件抽象地址
    * @param outputdir 目录绝对地址
    */
    public static void unZipToFolder(String zipfilename, String outputdir) throws IOException {
    File zipfile = new File(zipfilename);
    if (zipfile.exists()) {
    outputdir = outputdir + File.separator;
    FileUtils.forceMkdir(new File(outputdir));

    ZipFile zf = new ZipFile(zipfile, "GBK");
    Enumeration zipArchiveEntrys = zf.getEntries();
    while (zipArchiveEntrys.hasMoreElements()) {
    ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();
    if (zipArchiveEntry.isDirectory()) {
    FileUtils.forceMkdir(new File(outputdir + zipArchiveEntry.getName() + File.separator));
    } else {
    IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils.openOutputStream(new File(outputdir + zipArchiveEntry.getName())));
    }
    }
    } else {
    throw new IOException("指定的解压文件不存在: " + zipfilename);
    }
    }
    }

    注释:如果是web项目传outputStream流进来

  • 相关阅读:
    linux读写锁
    正则表达式
    C++原型模式和模板模式
    C++外观模式和组合模式
    C++代理模式
    c++桥接模式
    Linux常用命令history/tcpdump/awk/grep
    C++委托模式
    c++ 读写锁
    布衣客
  • 原文地址:https://www.cnblogs.com/chenweichu/p/5590489.html
Copyright © 2020-2023  润新知