Java多层目录打包和解压代码(apache commons compress, io, lang)

Java多层目录打包和解压代码(apache commons compress, io, lang)

package zip;
 
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;
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;
 
public class Main {
 
    public static void main(String[] args) throws FileNotFoundException, Exception {
        Main main = new Main("c:/test1.zip");
        main.createZipOut();
        main.packToolFiles("C:/test", "");
        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 Main(String zipname) {
        this.zipFileName = zipname;
    }
 
    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("指定的解压文件不存在:\t" + zipfilename);
        }
    }
}

下载地址:http://mirror.bit.edu.cn/apache//commons/compress/binaries/commons-compress-1.8.1-bin.zip

Java多层目录打包和解压代码(apache commons compress, io, lang),布布扣,bubuko.com

时间: 2024-08-08 22:15:43

Java多层目录打包和解压代码(apache commons compress, io, lang)的相关文章

Linux下打包和解压

Linux下使用tar命令来进行打包和解压的操作,再搭配常见压缩算法,可以实现对文件的压缩打包解压缩,常见的压缩算法有gzip,bzip2,还有deflate.snappy等其他的,这里不做记录. 压缩 通过算法,将文件尺寸进行相应缩小,同时不损失文件内容.常用压缩算法如gzip和bzip2,使用压缩算法后文件名分别为*.gz和*.bz2.使用旧的compress算法压缩的文件名为*.Z,目前比较少用. gzip gzip压缩解压使用命令 gzip [选项] 文件名,其中有如下常用选项. (1)

Java war打包和解压命令

涉及到JBoss不合理配置时,可以非授权访问jmx-console,这样就可以部署恶意war文件,得到JBoss服务器的webshell,进而可以进一步渗透得到服务器权限乃至内网漫游. 关于JBoss配置不当的攻击思路,网络上有许多相关的资料.可以参照链接:http://drops.wooyun.org/papers/178和http://www.hack80.com/thread-22662-1-1.html.涉及到部署war包时,有的是在eclipse中进行操作,其实在命令行下也是可以进行的

CentOS打包和解压详解

一.压缩和解压介绍 Linux下最常用的打包命令就是tar,使用tar命令打包后,就可以用其它的命令来进行压缩了.tar命令的使用方法tar命令 [[email protected] ~]# tar [-cxtzjvfpPN] 文件与目录 ....参数:-c :建立一个压缩文件的参数指令(create 的意思):-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件!特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩.-z :是否

Apache Commons之IO

1  概述 Commons IO是针对开发IO流功能的工具类库. 主要包括六个区域: 工具类--使用静态方法执行共同任务 输入--用于InputStream和Reader实现 输出--用于OutputStream和Writer实现 过滤器--各种文件过滤器实现 比较器--各种文件的java.util.Comparator实现 文件监听器--监听文件系统事件的组件 2  用户指南 Commons IO包含工具类.endian classes, line iterator, file filters

利用jar命令打包和解压

[导读]如何把 java 程序编译成 .exe 文件?使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持Java 的跨平台特性. 常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了:而另一种是使用 JET 来进行 编译.但是 JET 是要用钱买的,而且据说 JET 也不是能把所有的 Java 程序都编译成执行文件,性能也要打些折扣.所以,使用制作可执行 JAR 文

linux下的文件打包和解压

文件的打包压缩 gzip     (后缀.gz     不能压缩目录,压缩完后源文件会消失) 使用方法: gzip -1 1.txt     (压缩1.txt文件压缩比例最小压缩速度最快) gzip -9 1.txt     (压缩1.txt文件压缩比例最大,压缩速度最快) gzip -d 1.txt.gz     (对1.txt的压缩包进行解压缩) bzip2     (后缀.bz2     不能压缩目录,压缩完后源文件会消失 ) 使用方法: bzip2 -1 1.txt     (压缩1.t

Java原始的压缩和解压

package com.ahzc.test; import 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; im

文件的打包和解压-----常用

<17>归档管理:tar 计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据. tar使用格式 tar [参数] 打包文件名 文件 tar命令很特殊,其参数前面可以使用"-",也可以不使用. 常用参数: 参数 含义 -c 生成档案文件,创建打包文件 -v 列出归档解档的详细过程,显示进度 -f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后 -t 列出档案中包含

How to append files to a .tar archive using Apache Commons Compress?(转)

I created a copy of the tar archive and copied to entire content to it. Then I delete the old tar archive. public void appendFileInTarArchive(String tarPath, String tarFileName, String file2WriteName, String file2WriteContent) throws AuthenticationEx