我有一个应用程序,目前可以压缩选定文件的列表,即:
/basedir/文件夹\u a/文件\u a.txt
/basedir/文件夹\u b/文件夹\u c/文件\u b.txt(排除)
/basedir/文件夹\u b/文件夹\u d/文件\u c.txt
现在我可以创建一个包含所有文件的zip文件。但是,不包括文件夹结构,因此我的zip如下所示:
/zipfolder/file_a.txt文件
/zipfolder/file\u c.txt文件
因为我不想压缩一个文件夹中的所有文件,但只选择了一个,我有一个困难的时间。有人能告诉我如何添加文件,使其看起来像这样:
/zipfolder/文件夹\u a/文件\u a.txt
/zipfolder/文件夹\u b/文件夹\u d/文件\u c.txt
这是我的密码:
public static byte[] zip(List<File> listFiles) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream);
for (File file : listFiles) {
if (file.isDirectory()) {
zipDirectory(file, file.getName(), zipOutputStream);
} else {
zipFile(file, zipOutputStream);
}
}
zipOutputStream.flush();
zipOutputStream.close();
return byteArrayOutputStream.toByteArray();
}
private static void zipDirectory(File folder, String parentFolder, ZipOutputStream zos) throws IOException {
for (File file : folder.listFiles()) {
if (file.getName().endsWith(".zip")) {
continue;
}
if (file.isDirectory()) {
zipDirectory(file, parentFolder + "/" + file.getName(), zos);
continue;
}
zos.putNextEntry(new ZipEntry(parentFolder + "/" + file.getName()));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
long bytesRead = 0;
byte[] bytesIn = new byte[BUFFER_SIZE];
int read = 0;
while ((read = bis.read(bytesIn)) != -1) {
zos.write(bytesIn, 0, read);
bytesRead += read;
}
zos.closeEntry();
bis.close();
}
}
private static void zipFile(File file, ZipOutputStream zos) throws IOException {
zos.putNextEntry(new ZipEntry(file.getName()));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
long bytesRead = 0;
byte[] bytesIn = new byte[BUFFER_SIZE];
int read = 0;
while ((read = bis.read(bytesIn)) != -1) {
zos.write(bytesIn, 0, read);
bytesRead += read;
}
zos.closeEntry();
bis.close();
}
暂无答案!
目前还没有任何答案,快来回答吧!