【发布时间】:2020-07-20 05:03:45
【问题描述】:
我在下面使用java,但是当它压缩时,它会创建一个目录并将该目录中的所有内容压缩。 例如。如果我有一个名为“目录”的文件夹,并且我想将内容压缩到一个压缩文件中,则在压缩文件中它会创建一个文件夹 testZip 并在其中包含文件。 我需要压缩文件中的所有文件,而不是父目录中的所有文件。 请帮忙。或建议是否有其他方法。
package folderZip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipFolder {
public ZipFolder() {
}
public static void main(String[] args) throws Exception {
ZipFolder obj = new ZipFolder();
obj.zipFolder("C:\\Drive\\temp\\testZip","C:\\Drive\\temp\\FolderZiper.zip");
}
public void zipFolder(String srcFolder,
String destZipFile) throws Exception {
ZipOutputStream zip = null;
FileOutputStream fileWriter = null;
fileWriter = new FileOutputStream(destZipFile);
zip = new ZipOutputStream(fileWriter);
addFolderToZip("", srcFolder, zip);
zip.flush();
zip.close();
}
private void addFileToZip(String path, String srcFile,
ZipOutputStream zip) throws Exception {
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 void addFolderToZip(String path, String srcFolder,
ZipOutputStream zip) throws Exception {
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);
}
}
}
}
【问题讨论】:
-
基本上,如果我理解您的问题,您需要从所需的 zip 条目名称中去掉“源”文件夹名称。像this example 和 this example 和 this example
-
试试这个:当前文件夹是“testing”并创建一个名为“testfolder”的子文件夹。 testfolder 有多个文件,其中一个是“user-guide.pdf”。该程序应该能够创建一个只有一个条目 user-guide.pdf 的 ZIP 文件夹 - 输出 zip 文件“MyZip”将只有一个文件 user-guide.pdf。输出 zip 文件在您选择的文件夹中创建 - testing 或 testfolder。如果您能够做到这一点,您可以将相同的逻辑应用于您正在尝试的应用程序。此外,还可以使用
Files.walkFileTree和FileVisitorAPI 来遍历文件树并压缩内容。