java ZipFile如何将多级目录压缩
目录
- Java ZipFile将多级目录压缩
- 一个例子
- 步骤解析
- Java编程客栈多级目录导出文件压缩包
- 总结
java ZipFile将多级目录压缩
在 Java 中,可以使用 java.util.zip 包中的 ZipOutputStream 和 ZipEntry 类来压缩多级目录。
一个例子
展示如何递归地将一个目录及其所有子目录和文件压缩到一个 ZIP 文件中:
import java.io.*;
import java.nio.file.*;
import java.util.zip.*;
public class ZipDirectory {
public static void main(String[] args) throws IOException {
String sourceDirPath = "path/to/source/directory";
String zipFilePath = "path/to/output.zip";
try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
Path sourceDir = Paths.get(sourceDirPath);
Files.walk(sourceDir)
.filter(path -> !Files.isDirectory(path))
.forEach(path -> {
ZipEntry zipEntry = new ZipEntry(sourceDir.relativize(path).toString());
try {
zipOut.putNextEntry(zipEntry);
Files.copy(path, zipOut);
zipOut.closeEntry();
} catch (IOException e) {
System.err.println("Failed to add file to ZIP: " + path);
e.printStackTrace();
}
});
}
}
}
这个程序将遍历指定目录(包括子目录)的所有文件,并将它们添加到 ZIP 文件中。
步骤解析
- 使用 Files.walk 方法递归遍历源目录。
- 对于每个非目录文件,创建一个相对路径的 ZipEntry。
- 将文件内容复制到 ZipOutputStream。
请根据实际情况替换 sourceDirPath 和 zipFilePath。此外,请确保适当处理异常并关闭资源以避免资源泄漏。
Java多级目录导出文件压缩包
js //创建临时文件
File zipFile = File.createTempFile("test", ".zip");
Path temp = Files.createTempDirectory(null);
String srcImgPath = temp.toString();
for( 循环 ){
String outImgPath = srcImgPath + "/aa/bb/cc";
File outImgFile = new File(outImgPath);
//如果文件夹不存在则创建
if (!outImgFile.exists() && !outImgFile.isDirectory()) {
outImgFile.mkdirs();
}
FileOutputStream outImgStream = new FileOutputStream(outImgPath + "/" + name);
ImageIO.write(bufImg, imgSuffix, outImgStream);
outImgStream.flush();
outImgStream.close();
}
ZipUtil.zip(srcImgPath, zipFile.getAbsolutePath(), true);
String header = request.getHeader("User-Agent").toUpperCase();
String fileName = "附件信息" + System.currentTimeMillis() + ".zip";
if (header.contains("MSIE") || header.contains("TRIDENT") || header.containswww.devze.com("EDGE")) {
fileName = URLEncoder.encode(fileName, "utf-8");
//IE下载文件名空格变+号问题
fileName = fileName.replace("+", "%20");
} else {
fileName = new String(fileName.getBytes(), "ISO8859-1");
}
response.reset();
response.setContentType("text/plain");
response.setContentType("application/octet-stream; charset=utf-8");
response.setHeader("Location", fileName);
response.setHeader("Cache-Control", "max-age=0");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
FileInputStream fis = new FileInputStream(zipFile);
BufferedInputStream buff = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
byte[] car = new byte[1024];
int l = 0;
while (l < zipFile.length()) {
int j = buff.read(car, 0, 1024);
l += j;
out.write(car, 0, j);
python }
// 关android闭流
fis.close();
buff.close();
out.close();
// 删除临时文件
zipFile.delete();
FileUtil.deleteDir(srcImgPath);
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
加载中,请稍侯......
精彩评论