java实现zip压缩文件夹
时间: 2023-08-31 14:09:20 浏览: 110
以下是Java实现压缩文件夹的示例代码:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipFolder {
public static void main(String[] args) {
String sourceFolderPath = "C:/folder"; // 文件夹路径
String zipFilePath = "C:/folder.zip"; // 压缩文件路径
try {
// 创建ZipOutputStream对象
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath));
// 压缩文件夹
File folder = new File(sourceFolderPath);
zipFolder(folder, folder.getName(), zipOut);
// 关闭ZipOutputStream对象
zipOut.close();
System.out.println("文件夹压缩完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 压缩文件夹
* @param folder 待压缩的文件夹
* @param folderName 文件夹名称
* @param zipOut ZipOutputStream对象
* @throws IOException
*/
private static void zipFolder(File folder, String folderName, ZipOutputStream zipOut) throws IOException {
if (folder.isDirectory()) {
// 如果是文件夹,则获取文件夹中的所有文件和子文件夹
File[] files = folder.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
if (file.isDirectory()) {
// 如果是子文件夹,则递归调用zipFolder方法进行压缩
zipFolder(file, folderName + "/" + file.getName(), zipOut);
} else {
// 如果是文件,则将文件压缩并添加到ZipOutputStream对象中
addFileToZip(file, folderName, zipOut);
}
}
}
} else {
// 如果是文件,则将文件压缩并添加到ZipOutputStream对象中
addFileToZip(folder, "", zipOut);
}
}
/**
* 将文件压缩并添加到ZipOutputStream对象中
* @param file 待压缩的文件
* @param folderName 文件夹名称
* @param zipOut ZipOutputStream对象
* @throws IOException
*/
private static void addFileToZip(File file, String folderName, ZipOutputStream zipOut) throws IOException {
// 创建ZipEntry对象
ZipEntry zipEntry = new ZipEntry(folderName + "/" + file.getName());
// 将ZipEntry对象添加到ZipOutputStream对象中
zipOut.putNextEntry(zipEntry);
// 打开文件输入流
FileInputStream fileIn = new FileInputStream(file);
// 定义缓冲区
byte[] buf = new byte[1024];
int len;
// 从输入流中读取数据,并将数据写入到ZipOutputStream对象中
while ((len = fileIn.read(buf)) > 0) {
zipOut.write(buf, 0, len);
}
// 关闭文件输入流
fileIn.close();
// 关闭ZipEntry对象
zipOut.closeEntry();
}
}
```
在上述代码中,我们首先定义了待压缩的文件夹路径和压缩文件路径,然后创建了一个ZipOutputStream对象。接着,我们调用zipFolder方法进行文件夹压缩,最后关闭ZipOutputStream对象。
在zipFolder方法中,我们首先判断文件夹是否存在,如果存在则获取文件夹中的所有文件和子文件夹,然后递归调用zipFolder方法进行压缩。如果是文件,则将文件压缩并添加到ZipOutputStream对象中。
在addFileToZip方法中,我们首先创建了一个ZipEntry对象,然后将其添加到ZipOutputStream对象中。接着,打开文件输入流,定义缓冲区,并从输入流中读取数据,并将数据写入到ZipOutputStream对象中。最后,关闭文件输入流和ZipEntry对象。
运行上述代码后,将会在指定的压缩文件路径中生成一个压缩文件。
阅读全文