SpringBoot将文件压缩成zip
时间: 2024-01-03 14:04:29 浏览: 135
Spring Boot提供了一个非常方便的方式来压缩文件,可以使用Java自带的ZipOutputStream来实现。
你可以编写一个简单的工具类,将一个文件夹下的所有文件压缩成一个zip文件,代码如下:
```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 ZipUtils {
public static void zipFolder(String srcFolder, String destZipFile) throws IOException {
ZipOutputStream zip = null;
FileOutputStream fileWriter = null;
fileWriter = new FileOutputStream(destZipFile);
zip = new ZipOutputStream(fileWriter);
addFolderToZip("", srcFolder, zip);
zip.flush();
zip.close();
}
private static void addFileToZip(String path, String srcFile, ZipOutputStream zip) throws IOException {
File folder = new File(srcFile);
if (folder.isDirectory()) {
addFolderToZip(path, srcFile, zip);
} else {
byte[] buf = new byte[1024];
int len;
FileInputStream in = new FileInputStream(srcFile);
zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
while ((len = in.read(buf)) > 0) {
zip.write(buf, 0, len);
}
}
}
private static void addFolderToZip(String path, String srcFolder, ZipOutputStream zip) throws IOException {
File folder = new File(srcFolder);
for (String fileName : folder.list()) {
if (path.equals("")) {
addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);
} else {
addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);
}
}
}
}
```
上述代码中,`zipFolder`方法接收两个参数:源文件夹的路径和目标zip文件的路径。该方法首先打开一个ZipOutputStream,然后使用`addFolderToZip`方法从源文件夹中递归添加所有文件和子文件夹。
使用该工具类,你可以压缩任何文件夹,例如:
```java
ZipUtils.zipFolder("/path/to/folder", "/path/to/archive.zip");
```
这会压缩`/path/to/folder`下的所有文件和子文件夹,并将它们保存在`/path/to/archive.zip`文件中。
阅读全文