`

ant压缩文件夹

    博客分类:
  • java
ant 
阅读更多
package com.sniper.test;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

public class ZipUtil {
   
    public static final int BUFFER = 1024 * 4;
   
    /**
     * 压缩一个文件夹到一个指定文件
     * @param zipPath 需要压缩的文件夹路径
     * @param destFile 压缩到的文件
     * @throws IOException
     */
    public static void zipFiles(String zipPath, String destFile) throws IOException{
    File parentFile = new File(zipPath);
    Set<String> fileSet = new HashSet<String>();
    listFile(parentFile, fileSet);
   
    zipFiles(fileSet, new File(zipPath), destFile);
    }
   
    /**
     * @param filePathList 压缩的文件列表
     * @param destFile 压缩到的文件
     * @param rootDir 根路径
     * @throws IOException
     */
    public static void zipFiles(Set<String> filePathList, File destFile, String rootDir) throws IOException {
        byte[] buf = new byte[BUFFER];
        ZipEntry ze = null;
        int readLen = 0;
        ZipOutputStream out = null;
        InputStream in = null;
        try {
            out = new ZipOutputStream(new FileOutputStream(destFile));
for (String filePath : filePathList) {
File srcFile = new File(filePath);
                //是文件
                if (srcFile.isFile()) {
                    //创建一个ZipEntry,并设置Name和其它的一些属性
                    ze = new ZipEntry(getRelativeFileName(rootDir, srcFile));
                    ze.setSize(srcFile.length());
                    ze.setTime(srcFile.lastModified());
                   
                    //将ZipEntry加到out中,再写入实际的文件内容
                    out.putNextEntry(ze);
                    try {
                        in = new BufferedInputStream(new FileInputStream(srcFile));
                        while ( (readLen = in.read(buf, 0, BUFFER)) != -1) {
                            out.write(buf, 0, readLen);
                        }
                    }
                    finally {
                        if (in != null) {
                            try {
                                in.close();
                            }
                            catch (Exception ignore) {
                            }
                        }
                    }
                }
                //是目录
                else if (srcFile.isDirectory()){
                    ze = new ZipEntry(getRelativeFileName(rootDir, srcFile));
                    //仅仅将ZipEntry加到out中
                    out.putNextEntry(ze);
                }
                else {
                System.out.println(srcFile + " is neither a file nor a directory, ignore it");
                continue;
                }
                out.closeEntry();
            }
        }
        finally {
            if (in != null) {
                try {
                    in.close();
                }
                catch (Exception ignore) {
                }
                finally {
                    in = null;
                }
            }
            if (out != null) {
                try {
                    out.close();
                }
                catch (Exception ignore) {
                }
                finally {
                    out = null;
                }
            }
        }
    }
   
    public static void listFile(File parentFile, Set<String> fileSet) {
        if (parentFile.isDirectory()) {
            File[] files = parentFile.listFiles();
            for (int i = 0; i < files.length; i++) {
                listFile(files[i], fileSet);
            }
            //fileSet.add(parentFile.getAbsolutePath()); // no parent
        }
        else {
        fileSet.add(parentFile.getAbsolutePath());
        }
    }
   
    public static String getRelativeFileName(String baseDir, File realFile) {
        File real = realFile;
        File base = new File(baseDir);
        String ret = real.getName();
        if (!realFile.isFile()) {
        ret += '/';
        }
        while (true) {
            real = real.getParentFile();
            if (real == null) {
                break;
            }
            if (real.equals(base)) {
                break;
            }
            else {
                //这里不能使用File.separator替代“/”,因为压缩/解压都只识别“/”分割符
                ret = real.getName() + '/' + ret;
            }
        }
        System.out.println(ret);
        return ret;
    }


    public static void main(String[] args) throws Exception {

    String zipPath = "c:/zip";
    File parentFile = new File(zipPath);
    Set<String> fileSet = new HashSet<String>();
    listFile(parentFile, fileSet);
   
    for(String fileStr : fileSet){
    //System.out.println(fileStr);
    }
   
    zipFiles(fileSet, new File("c:/zip.zip"), zipPath);
   
   
}

}
分享到:
评论

相关推荐

    java利用ant压缩指定文件夹-附件资源

    java利用ant压缩指定文件夹-附件资源

    ant-1.9.7jar包 java实现压缩文件文件夹

    下载即可导入实现压缩文件夹和文件。 代码实现请看下面网址: https://blog.csdn.net/echohuangshihuxue/article/details/81837591

    androi解压缩文件或文件夹

    1.Android 压缩文件,压缩文件夹 2.解压文件,解压文件夹 3.完美支持文件名称和文件夹目录中存在中文的乱码问题 4.apache下的 ant.jar包 5.要点 mainifest中的权限 6. zipUtil在压缩和解压过程中的编码格式的指定...

    java zip压缩解压工具解决中文乱码问题

    使用java压缩也解压zip文件方法,解决中文乱码问题。使用java自带的压缩解压算法,会出现中文乱码问题。使用apache io的zip包,有效解决该问题。Ant的压缩解压,也是使用该类。

    AntZip:AntZip 压缩与解压

    AntZip压缩/*** 对传入的目录或者是文件进行压缩* @param srcFile 需要 压缩的目录或者文件* @param destFile 压缩文件的路径*/public void doZip(String srcFile, String destFile) {// zipDirectoryPath:需要...

    java 下载文件 压缩且删除源文件(支持文件夹与文件)

    2、指定文件夹(文件夹中必须有一个文件),程序会自动的压缩文件为 zip,然后下载删除源文件与压缩文件。 3、可以指定文件都为最后生成为zip文件下载,且删除源文件。 1、压缩文件或者目录(只是压缩不删除):...

    ant build.xml构建使用案例

    2、配置环境变量,将解压缩的路径(你的硬盘:\放的文件夹下\apache-ant-1.8.4\bin),配置在环境变量的path路径下,输入ant看效果。 3、部署本项目,运行构建看效果。 说明:这个是一个项目开发的辅助工具,比较...

    ant和yuicompressor 压缩css、js方案

    NULL 博文链接:https://ynp.iteye.com/blog/1296569

    java 文件夹打包 zip

    结合网上资源,写了一个文件夹打包的工具类,含所需ant.jar 压缩格式:.zip

    Java操作Ant压缩和解压文件及批量打包Anroid应用

    java中实际是提供了对 zip等压缩格式的支持,但是为什么这里会用到ant呢? 原因主要有两个: 1. java提供的类对于包括有中文字符的路径,文件名支持不够好,你用其它第三方软件解压的时候就会存在乱码。而ant.jar就...

    打包文件夹

    给定dir目录,使用ant类自带压缩功能,进行文件夹的打包

    JAVA 压缩解压AES

    JAVA 文件夹压缩解压,并使用AES加密源代码,带ant.jar包

    java 压缩和解压 demo 解决中文乱码

    java 压缩和解压 demo 解决中文乱码 这是本人做好的一个关于java压缩、解压缩文件或文件夹的demo,解决了中文乱码的问题,可以压缩或解压缩嵌套文件夹。一个ZipHelper + ant.jar轻松解决^_^,希望可以帮助到大家!具体...

    Ant测试所需文件.zip

    本压缩文件解压后生成的解压文件夹即文件用于博客《Ant——使用Ant构建简单Java项目》的试验,博客参见网址:http://blog.csdn.net/gaohuanjie/article/details/40144821

    struts 2.0 源码 第三章

    将下载的Ant压缩文件解压缩到任意路径,然后增加ANT_HOME的环境变量,让变量的值为Ant的解压缩路径。并在PATH环境变量中增加%ANT_HOME%/bin环境变量。 4.安装MySQL 5.0或更高版本,安装MysSQL时选择GBK的编码方式...

    struts2.0 第五章 第1,2节

    将下载的Ant压缩文件解压缩到任意路径,然后增加ANT_HOME的环境变量,让变量的值为Ant的解压缩路径。并在PATH环境变量中增加%ANT_HOME%/bin环境变量。 4.安装MySQL 5.0或更高版本,安装MysSQL时选择GBK的编码方式...

    java压缩使用org.apache.tools.zip包解决中文文件名

    //ZipOutputStream类:完成文件或文件夹的压缩 ZipOutputStream outf=new ZipOutputStream(new FileOutputStream(zipfile)); outf.setEncoding("gbk"); for(int i=0;i;i++){ FileInputStream in=...

    apache-ant-1.9.4-bin

    这是Ant工具Windows版压缩包,来自Apache官网。免积分分享。 Ant是一个基于Java的build工具。 有些时候需要安装Ant,...安装方法:解压缩至某一目录,将该压缩包内bin文件夹下的ant.bat文件的路径加入系统变量Path下。

    java压缩demo

    一个我做好的java压缩/解压缩文件的demo,一个ZipHelper类+ant.jar包,解决了压缩或解压缩后中文乱码的问题!,可解压嵌套文件夹,用的过程只需new一个ZipHelper,调用该类方法即可,demo里有详细说明!^_^

Global site tag (gtag.js) - Google Analytics