// 将要被压缩的文件夹路径
String folderPath = "D:/downloadResult/";
// 压缩后生成的压缩文件路径及临时文件名
String zipFilePath = "D:/uploadResult/" + parkCode + ".zip";
dataReportUtil.isFilePath("D:/uploadResult");//判断目录是否存在
zipFolder(folderPath, zipFilePath);
/**
* 打包压缩文件夹
*
* @param folderPath 文件夹路径
* @param zipFilePath 压缩后的文件路径
* @throws IOException IO异常
*/
public static void zipFolder(String folderPath, String zipFilePath) throws IOException {
FileOutputStream fos = null;
ZipOutputStream zos = null;
try {
fos = new FileOutputStream(zipFilePath);
zos = new ZipOutputStream(fos);
// 递归遍历整个文件夹并添加到压缩包
addFolderToZip("", new File(folderPath), zos);
} finally {
if (zos != null) {
zos.close();
}
if (fos != null) {
fos.close();
}
}
}
/**
* 将文件夹及其中的文件递归添加到压缩流中
*
* @param parentPath 父级路径
* @param folder 文件夹
* @param zos Zip输出流
* @throws FileNotFoundException 文件未找到异常
* @throws IOException IO异常
*/
private static void addFolderToZip(String parentPath, File folder, ZipOutputStream zos) throws FileNotFoundException, IOException {
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
// 递归添加子文件夹中的文件
addFolderToZip(folder.getName() + "/", file, zos);
} else {
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
//判断是否为json数据
String zipName = file.toString().contains(".json") ? file.getName() : folder.getName() + "/" + file.getName();
// 新建Zip条目并将输入流加入到Zip包中
ZipEntry zipEntry = new ZipEntry(zipName);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
} finally {
if (fis != null) {
fis.close();
}
}
}
}
}
JAVA将本地文件夹内容生成压缩包
于 2024-08-14 14:50:21 首次发布