ZipOutputStream生成自定义文件夹
时间: 2023-10-25 16:14:38 浏览: 71
可以使用ZipEntry类来创建自定义文件夹。ZipEntry类表示zip文件中的一个条目,它可以代表一个文件或一个文件夹。
以下是一个示例代码:
```java
import java.io.*;
import java.util.zip.*;
public class ZipFolderExample {
public static void main(String[] args) throws IOException {
String sourceFolder = "path/to/source/folder";
String zipFile = "path/to/zip/file.zip";
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
addFolderToZip(sourceFolder, zos, "");
zos.close();
fos.close();
}
private static void addFolderToZip(String folderPath, ZipOutputStream zos, String parentFolder) throws IOException {
File folder = new File(folderPath);
String folderName = folder.getName();
if (!parentFolder.equals("")) {
folderName = parentFolder + "/" + folderName;
}
ZipEntry zipEntry = new ZipEntry(folderName + "/");
zos.putNextEntry(zipEntry);
for (File file : folder.listFiles()) {
if (file.isFile()) {
addFileToZip(file, zos, folderName);
} else {
addFolderToZip(file.getAbsolutePath(), zos, folderName);
}
}
}
private static void addFileToZip(File file, ZipOutputStream zos, String parentFolder) throws IOException {
String fileName = file.getName();
if (!parentFolder.equals("")) {
fileName = parentFolder + "/" + fileName;
}
ZipEntry zipEntry = new ZipEntry(fileName);
zos.putNextEntry(zipEntry);
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
fis.close();
}
}
```
这个示例代码将指定的文件夹压缩成一个zip文件,并且在zip文件中创建了自定义文件夹。函数addFolderToZip()递归地遍历文件夹中的所有文件和子文件夹,并为每个子文件夹创建一个ZipEntry对象。函数addFileToZip()将文件添加到zip文件中。
阅读全文