Java简易文件夹压缩至Zip文件

需积分: 13 11 下载量 144 浏览量 更新于2024-09-13 收藏 1KB TXT 举报
本篇文章主要介绍了如何在Java中使用Apache Ant库来实现一个简单的文件夹压缩功能,将指定目录下的文件压缩成一个ZIP文件。以下内容将详细解释这个Java程序的工作原理和技术细节。 首先,引入了所需的Java库,包括`java.io.File`用于文件和目录操作,`org.apache.tools.ant.Project`用于创建Ant项目对象,`org.apache.tools.ant.taskdefs.Zip`用于定义压缩任务,以及`org.apache.tools.ant.types.FileSet`用于指定需要压缩的文件集合。 `ZipCompressorByAnt`类的构造函数接受一个参数`pathName`,它表示最终ZIP文件的路径。在类内部,我们创建了一个`File`对象`zipFile`来存储压缩后的ZIP文件。 `compress`方法是核心部分,它接收一个字符串参数`srcPathName`,即源文件或目录的路径。该方法首先检查源目录是否存在,如果不存在则抛出运行时异常。接着,创建一个新的Ant项目`Project`实例,并初始化`Zip`对象,设置其项目关联和目标文件为`zipFile`。 `FileSet`对象`fileSet`用于定义要压缩的文件集。在这里,文件集包含了源目录下的所有文件(默认情况下,`setIncludes`会包含目录下所有文件,通过`**/*.java`匹配所有.java文件)。你可以根据需求自定义`includes`和`excludes`属性来过滤文件。 最后,将`fileSet`添加到`Zip`对象中,并调用`execute()`方法执行压缩操作。这将把指定目录下的文件按照Ant的规则打包到`zipFile`中。 `main`方法展示了如何使用这个`ZipCompressorByAnt`类进行实际操作,创建一个名为`D:\\zipant.zip`的ZIP文件,然后将`D:\\Boot`目录中的文件进行压缩。 这篇代码演示了如何利用Java和Apache Ant库进行文件夹的简单压缩,适用于在Java开发中处理文件管理任务,特别是当需要批量压缩特定类型的文件时。需要注意的是,这只是一个基础示例,实际使用时可能需要处理更复杂的文件选择、错误处理以及其他额外功能。
2012-04-18 上传
Java实现压缩与解压缩ZIP   import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.File;   import java.io.FileInputStream;   import java.io.FileOutputStream;   import java.util.zip.ZipEntry;   import java.util.zip.ZipOutputStream;   public class Zip {   static final int BUFFER = 2048;   public static void main(String argv[]) {   try {   BufferedInputStream origin = null;   FileOutputStream dest = new FileOutputStream("E:\\test\\myfiles.zip");   ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(   dest));   byte data[] = new byte[BUFFER];   File f = new File("e:\\test\\a\\");   File files[] = f.listFiles();   for (int i = 0; i < files.length; i++) {   FileInputStream fi = new FileInputStream(files[i]);   origin = new BufferedInputStream(fi, BUFFER);   ZipEntry entry = new ZipEntry(files[i].getName());   out.putNextEntry(entry);   int count;   while ((count = origin.read(data, 0, BUFFER)) != -1) {   out.write(data, 0, count);   }   origin.close();   }   out.close();   } catch (Exception e) {   e.printStackTrace();   }   }   }   解压缩的   import java.io.BufferedInputStream;   import java.io.BufferedOutputStream;   import java.io.File;   import java.io.FileOutputStream;   import java.util.Enumeration;   import java.util.zip.ZipEntry;   import java.util.zip.ZipFile;   public class UnZip {   static final int BUFFER = 2048;   public static void main(String argv[]) {   try {   String fileName = "E:\\test\\myfiles.zip";   String filePath = "E:\\test\\";   ZipFile zipFile = new ZipFile(fileName);   Enumeration emu = zipFile.entries();   int i=0;   while(emu.hasMoreElements()){   ZipEntry entry = (ZipEntry)emu.nextElement();   //会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。   if (entry.isDirectory())   {   new File(filePath + entry.getName()).mkdirs();   continue;   }   BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));   File file = new File(filePath + entry.getName());   //加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件   //而这个文件所在的目录还没有出现过,所以要建出目录来。   File parent = file.getParentFile();   if(parent != null && (!parent.exists())){   parent.mkdirs();   }   FileOutputStream fos = new FileOutputStream(file);   BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER);   int count;   byte data[] = new byte[BUFFER];   while ((count = bis.read(data, 0, BUFFER)) != -1)   {   bos.write(data, 0, count);   }   bos.flush();   bos.close();   bis.close();   }   zipFile.close();   } catch (Exception e) {   e.printStackTrace();   }   }   }