Java 多文件压缩与解压
发布人:shili8
发布时间:2025-02-03 13:04
阅读次数:0
**Java 多文件压缩与解压**
在 Java 中,多文件压缩和解压是非常常见的需求。通过使用 Java 的 ZIP 和 JAR 库,我们可以轻松地实现对多个文件进行压缩和解压。
###1. 使用 ZIP 库进行压缩首先,让我们来看一下如何使用 ZIP 库进行压缩。ZIP 库是 Java 中用于处理 ZIP 文件的标准库。
#### **ZipUtil.java**
javaimport java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipUtil { public static void zipFiles(String srcDir, String destFile) throws Exception { // 创建 ZIP 输出流 FileOutputStream fos = new FileOutputStream(destFile); ZipOutputStream zos = new ZipOutputStream(fos); // 遍历源目录下的所有文件 File dir = new File(srcDir); addFilesToZip(dir, zos); // 关闭输出流 zos.close(); } private static void addFilesToZip(File file, ZipOutputStream zos) throws Exception { if (file.isDirectory()) { // 如果是目录,则添加目录信息 File[] files = file.listFiles(); for (File f : files) { addFilesToZip(f, zos); } } else { // 如果是文件,则添加到 ZIP 中 FileInputStream fis = new FileInputStream(file); ZipEntry entry = new ZipEntry(file.getName()); zos.putNextEntry(entry); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) >0) { zos.write(buffer,0, len); } fis.close(); } } }
#### **使用示例**
javapublic class Main { public static void main(String[] args) throws Exception { // 源目录 String srcDir = "src"; // 目标 ZIP 文件 String destFile = "example.zip"; // 压缩源目录下的所有文件 ZipUtil.zipFiles(srcDir, destFile); System.out.println("压缩完成!"); } }
###2. 使用 JAR 库进行压缩除了使用 ZIP 库外,我们还可以使用 JAR 库对多个文件进行压缩。JAR 库是 Java 中用于处理 JAR 文件的标准库。
#### **JarUtil.java**
javaimport java.io.File; import java.io.FileInputStream; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; public class JarUtil { public static void jarFiles(String srcDir, String destFile) throws Exception { // 创建 JAR 输出流 FileOutputStream fos = new FileOutputStream(destFile); JarOutputStream jos = new JarOutputStream(fos); // 遍历源目录下的所有文件 File dir = new File(srcDir); addFilesToJar(dir, jos); // 关闭输出流 jos.close(); } private static void addFilesToJar(File file, JarOutputStream jos) throws Exception { if (file.isDirectory()) { // 如果是目录,则添加目录信息 File[] files = file.listFiles(); for (File f : files) { addFilesToJar(f, jos); } } else { // 如果是文件,则添加到 JAR 中 FileInputStream fis = new FileInputStream(file); JarEntry entry = new JarEntry(file.getName()); jos.putNextEntry(entry); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) >0) { jos.write(buffer,0, len); } fis.close(); } } }
#### **使用示例**
javapublic class Main { public static void main(String[] args) throws Exception { // 源目录 String srcDir = "src"; // 目标 JAR 文件 String destFile = "example.jar"; // 压缩源目录下的所有文件 JarUtil.jarFiles(srcDir, destFile); System.out.println("压缩完成!"); } }
###3. 使用 Apache Commons Compress 库进行压缩除了使用 Java 的 ZIP 和 JAR 库外,我们还可以使用 Apache Commons Compress 库对多个文件进行压缩。
#### **CompressUtil.java**
javaimport org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.utils.IOUtils; public class CompressUtil { public static void compressFiles(String srcDir, String destFile) throws Exception { // 创建压缩输出流 TarArchiveOutputStream taos = new TarArchiveOutputStream(new FileOutputStream(destFile)); // 遍历源目录下的所有文件 File dir = new File(srcDir); addFilesToCompress(dir, taos); // 关闭输出流 taos.close(); } private static void addFilesToCompress(File file, TarArchiveOutputStream taos) throws Exception { if (file.isDirectory()) { // 如果是目录,则添加目录信息 File[] files = file.listFiles(); for (File f : files) { addFilesToCompress(f, taos); } } else { // 如果是文件,则添加到压缩中 TarArchiveEntry entry = new TarArchiveEntry(file.getName()); taos.putArchiveEntry(entry); FileInputStream fis = new FileInputStream(file); IOUtils.copy(fis, taos); fis.close(); } } }
#### **使用示例**
javapublic class Main { public static void main(String[] args) throws Exception { // 源目录 String srcDir = "src"; // 目标压缩文件 String destFile = "example.tar.gz"; // 压缩源目录下的所有文件 CompressUtil.compressFiles(srcDir, destFile); System.out.println("压缩完成!"); } }
通过以上的例子,我们可以看到使用 Java 的 ZIP 和 JAR 库、Apache Commons Compress 库对多个文件进行压缩和解压是非常简单的。