gpt4 book ai didi

java - 如何使用 Java 压缩/解压缩文件夹及其所有文件和子目录?

转载 作者:行者123 更新时间:2023-11-29 08:04:16 25 4
gpt4 key购买 nike

我读这篇文章是为了学习如何使用 Java 压缩/解压缩文件。我用了this指导我,它在将所有文件压缩到一个文件夹中时效果很好,但是当我用一个包含更多文件夹的文件夹对其进行测试时,它不起作用,它抛出了以下错误:

java.io.FileNotFoundException: assets (Access is denied) //assets is the name of the folder I tried to zip
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at Zip.main(Zip.java:24)

这是我正在使用的类,您会看到它与上一个链接中的代码示例 4:Zip.java 类代码相同:

import java.io.*;
import java.util.zip.*;

public class Zip {
static final int BUFFER = 2048;
public void zip() {
try {
BufferedInputStream origin = null;
FileOutputStream dest = new
FileOutputStream("H:\\myfigs.zip");
CheckedOutputStream checksum = new
CheckedOutputStream(dest, new Adler32());
ZipOutputStream out = new
ZipOutputStream(new
BufferedOutputStream(checksum));
//out.setMethod(ZipOutputStream.DEFLATED);
byte data[] = new byte[BUFFER];
// get a list of files from current directory
File f = new File(".");
String files[] = f.list();

for (int i=0; i<files.length; i++) {
System.out.println("Adding: "+files[i]);
FileInputStream fi = new
FileInputStream(files[i]);
origin = new
BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(files[i]);
out.putNextEntry(entry);
int count;
while((count = origin.read(data, 0,
BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
}
out.close();
System.out.println("checksum: "+checksum.getChecksum().getValue());
} catch(Exception e) {
e.printStackTrace();
}
}
}

应该进行哪些更改,以便此代码可以将文件夹及其所有文件压缩到一个 zip 文件中?

最佳答案

zip 条目需要指定存档内文件的路径。您不能将文件夹添加到 zip 存档 - 您只能添加文件夹中的文件。

命名约定是使用正斜杠作为路径分隔符。如果您正在压缩包含以下文件/子目录的文件夹:

c:\foo\bar\a.txt
c:\foo\bar\sub1\b.txt
c:\foo\bar\sub2\c.txt

zip 条目名称将是:

a.txt
sub1/b.txt
sub2/c.txt

因此,要修复您的算法,请在您的 for 循环中添加 isDirectory(),然后递归地将任何子目录中的文件添加到 zip。可能最好的方法是使用一种方法:

addDirectoryToZip(String prefix, File directory, ZipOutputStream out)

这是问题的解决方案:java.util.zip - Recreating directory structure

关于java - 如何使用 Java 压缩/解压缩文件夹及其所有文件和子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com