`

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);
   
   
}

}
分享到:
评论

相关推荐

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

    标签中的“压缩文件 压缩文件夹 ant-1.9.7 java实现压缩”强调了Ant在Java环境中对单个文件和整个目录结构进行压缩的能力。Ant的`&lt;zip&gt;`任务不仅限于压缩,还可以解压缩ZIP文件,或者在现有ZIP文件中添加、删除或...

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

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

    java 打包文件(文件夹)为 zip压缩包 java 压缩文件

    4. **递归遍历文件夹**: 如果你需要压缩的是一个文件夹,你需要递归地遍历所有子文件和子文件夹。这可以通过递归函数实现,对每个文件创建一个`ZipEntry`,然后将其写入`ZipOutputStream`。 5. **设置压缩级别**: `...

    androi解压缩文件或文件夹

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

    apache-ant-1.6.5-bin.zip_ ant 1.6.5_ant_ant-1.6.5_apache ant win

    Apache Ant 是一个开源的构建工具,广泛用于Java项目构建,由Apache软件基金...通过解压缩此ZIP文件并配置环境变量,用户可以利用Ant执行各种项目构建任务。详细的使用方法和特性可通过提供的readme.txt文件进行查阅。

    ant和yuicompressor 压缩css、js方案

    标题 "ant和yuicompressor 压缩css、js方案" 涉及到的是在软件开发中如何使用构建工具Ant以及JavaScript压缩工具YUI Compressor来优化前端资源,特别是CSS和JavaScript文件。这两个工具在Web开发中起着至关重要的...

    AntZip:AntZip 压缩与解压

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

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

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

    java简单压缩算法

    ### Java简单压缩算法:利用Apache Ant进行文件夹压缩 在Java开发中,文件的压缩与解压是一项常见的需求,尤其是在处理大量数据或需要传输大文件时。本文将深入解析一个基于Java的简单压缩算法,该算法利用Apache ...

    ANT自动更新工具

    首先,为了开始使用ANT,你需要将`ant`文件夹放置在计算机的根目录下,确保它与源代码位于同一磁盘内。接下来,设置系统环境变量`PATH`,例如添加`D:\ant\bin`,以便系统能够找到ANT的可执行文件。这使得在任何目录...

    ant build.xml构建使用案例

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

    java 文件夹打包 zip

    在这个场景中,我们使用了Java来实现文件夹的打包功能,并且依赖了Apache Ant库的`ant.jar`,这是一个强大的构建工具,提供了许多用于处理文件操作的API。 Java标准库虽然内置了`java.util.zip`包,可以用于创建ZIP...

    ANT 压缩(去掉空格/注释)JS文件可提高js运行速度

    4. **指定源文件和目标文件夹**:通过fileset标签指定源文件的位置,并定义输出文件夹(outputfolder),告诉压缩任务应该将压缩后的文件放入哪个目录。 5. **执行构建任务**:最后,通过Ant命令行工具执行定义好的...

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

    在这种情况下,引入Apache Ant的`ant.jar`库可以解决这些问题,因为它提供了对中文字符的良好支持和更便捷的压缩与解压缩功能。 Apache Ant是一个基于Java的任务驱动的构建系统,它提供了一系列的任务类,可以用于...

    Mac安装Ant 到usr目录下不报错

    由于/usr是隐藏目录,你可以通过终端来创建这个文件夹。 3. 将下载的Ant压缩包移动到/usr/local目录下。这需要使用终端和管理员权限。例如,如果你将压缩包放在桌面上,可以使用以下命令: ``` cd ~/Desktop ...

    apache-ant-1.9.6-linux包

    首先,用户需要下载这个压缩包,然后使用常见的Linux命令(如`tar -zxvf apache-ant-1.9.6.tgz`)解压缩到任意目录。例如,用户可能选择`/opt`或`/usr/local`这样的系统目录,或者个人的工作空间`~/.local`。 接...

    Ant 打包Demo

    2. **配置Eclipse**:在Eclipse中,进入`Window &gt; Preferences &gt; Ant &gt; Runtime`,点击`Classpath`标签页,然后添加Ant安装目录下的`lib`文件夹,这样Eclipse就可以识别Ant库了。 **三、创建build.xml文件** 在...

    Ant环境配置和单个类简单编译测试

    这个文件夹将包含Ant的所有必需文件。 接着,配置系统环境变量是必要的步骤。在Windows系统中,可以通过以下步骤进行设置: 1. 计算机 -&gt; 属性 -&gt; 高级系统设置 -&gt; 环境变量。 2. 在“系统变量”区域,点击“新建”...

Global site tag (gtag.js) - Google Analytics