zoukankan      html  css  js  c++  java
  • 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流进来

  • 相关阅读:
    第八章 多线程编程
    Linked List Cycle II
    Swap Nodes in Pairs
    Container With Most Water
    Best Time to Buy and Sell Stock III
    Best Time to Buy and Sell Stock II
    Linked List Cycle
    4Sum
    3Sum
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/chenweichu/p/5590489.html
Copyright © 2011-2022 走看看