java压缩文件夹时不会压缩空的文件夹吗?
时间: 2023-08-11 07:36:29 浏览: 116
在Java中,使用ZipOutputStream压缩文件夹时,空文件夹不会被压缩。这是因为Zip文件格式本身不支持空文件夹。
如果你希望在压缩文件夹时也包含空文件夹,可以在压缩文件夹时手动添加一个空文件夹的ZipEntry。以下是修改后的示例代码:
```java
import java.io.*;
import java.util.zip.*;
public class ZipFolder {
public static void main(String[] args) throws Exception {
// 指定要压缩的文件夹路径
String sourceFolder = "C:\\MyFolder";
// 指定压缩后的文件路径和名称
String zipFile = "C:\\MyFolder.zip";
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
// 添加空文件夹的ZipEntry
ZipEntry ze = new ZipEntry("EmptyFolder/");
zos.putNextEntry(ze);
zos.closeEntry();
// 递归遍历文件夹,将文件夹内的每个文件添加到压缩文件中
addFolderToZip(sourceFolder, sourceFolder, zos);
zos.close();
fos.close();
}
private static void addFolderToZip(String folderPath, String basePath, ZipOutputStream zos) throws Exception {
File folder = new File(folderPath);
// 如果是文件夹,则递归遍历文件夹,将文件夹内的每个文件添加到压缩文件中
if (folder.isDirectory()) {
String[] fileList = folder.list();
for (String fileName : fileList) {
String filePath = folderPath + File.separator + fileName;
addFolderToZip(filePath, basePath, zos);
}
} else {
// 如果是文件,则将文件添加到压缩文件中
String relativePath = folderPath.substring(basePath.length() + 1);
ZipEntry ze = new ZipEntry(relativePath);
zos.putNextEntry(ze);
FileInputStream fis = new FileInputStream(folderPath);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
fis.close();
zos.closeEntry();
}
}
}
```
在这个示例代码中,我们首先手动添加一个空文件夹的ZipEntry。然后,我们递归遍历文件夹,将文件夹内的每个文件添加到压缩文件中。如果遇到文件夹,则递归调用addFolderToZip方法。如果遇到文件,则将文件添加到压缩文件中。最后,我们关闭ZipOutputStream和FileOutputStream对象。
阅读全文