java递归压缩文件夹_Java如何递归压缩或压缩目录?

本文介绍了一个使用Java实现目录递归压缩的例子。通过java.util.zip.ZipOutputStream和ZipEntry类,可以将指定目录及其子目录中的文件压缩成一个ZIP文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在此示例中,您将学习如何递归压缩或压缩目录。压缩文件格式允许我们压缩多个文件。我们使用java.util.zip.ZipOutputStream来压缩文件。zip文件中的每个条目均由java.util.zip.ZipEntry类表示。

要压缩目录,我们必须首先获取指定目录中的所有文件列表,包括子目录中的所有文件。在示例中,此任务由getFileList()方法处理。此方法将文件列表存储在fileList变量中,以供以后在压缩过程中创建时使用ZipEntry。

下面的代码示例向您展示如何使用zip压缩多个文件。package org.nhooo.example.zip;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public class ZipDirectoryExample {

private List fileList = new ArrayList<>();

public static void main(String[] args) {

String dir = "D:\\Data";

String zipFile = "D:\\Data.zip";

ZipDirectoryExample zip = new ZipDirectoryExample();

zip.compressDirectory(dir, zipFile);

}

private void compressDirectory(String dir, String zipFile) {

File directory = new File(dir);

getFileList(directory);

try (FileOutputStream fos = new FileOutputStream(zipFile);

ZipOutputStream zos = new ZipOutputStream(fos)) {

for (String filePath : fileList) {

System.out.println("Compressing: " + filePath);

// 创建一个zip条目。

String name = filePath.substring(

directory.getAbsolutePath().length() + 1,

filePath.length());

ZipEntry zipEntry = new ZipEntry(name);

zos.putNextEntry(zipEntry);

// 读取文件内容并写入zip输出流。

try (FileInputStream fis = new FileInputStream(filePath)) {

byte[] buffer = new byte[1024];

int length;

while ((length = fis.read(buffer)) > 0) {

zos.write(buffer, 0, length);

}

// 关闭邮递区号。

zos.closeEntry();

} catch (Exception e) {

e.printStackTrace();

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* Get files list from the directory recursive to the sub directory.

*/

private void getFileList(File directory) {

File[] files = directory.listFiles();

if (files != null && files.length > 0) {

for (File file : files) {

if (file.isFile()) {

fileList.add(file.getAbsolutePath());

} else {

getFileList(file);

}

}

}

}

}

上面的代码段将压缩D:\Data目录,并将产生一个名为的zip文件Data.zip。运行该程序时,您可以在控制台中看到以下内容:Compressing: D:\Data\Aa.txt

Compressing: D:\Data\AA1a1.txt

Compressing: D:\Data\Bb.txt

Compressing: D:\Data\Cc.txt

Compressing: D:\Data\CC1c1.txt

Compressing: D:\Data\Dd.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值