大家好。也许这个问题很老套,但我是 Java 的新手,我就是想不出来。
问题是这样的:
有一个文件夹,它包含许多不同的文件。我只选择我需要的(在更改日期之前)。我正在使用 java.util.zip.ZipOutputStream。当我将文件传递给存档方法时,它使我为每个文件创建一个单独的存档。有没有什么方法可以让您制作一个存档,而无需将必要的文件复制/移动到单独的文件夹?
我从文件数组中选择必要文件并将其传输以进行存档的代码:
for (File s : files) {
BasicFileAttributes attr = Files.readAttributes(s.toPath(), BasicFileAttributes.class);
if (dateChecker(attr.lastModifiedTime())) {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(s.getPath() + ".zip"));
doZip(s, out);
out.close();
}
}
存档方式:
void doZip(File dir, ZipOutputStream out){
try {
out.setLevel(9);
out.putNextEntry(new ZipEntry(dir.getName()));
write(new FileInputStream(dir), out);
}
catch (IOException e) {
e.printStackTrace();
}
}
private static void write(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) >= 0)
out.write(buffer, 0, len);
in.close();
}
事实上,你用自己的双手制作了几个档案。
在这里,您为每个下一个文件(在循环中)创建一个新流,也就是说,一个新名称对应于
<имя файла>.zip. 而归档后,关闭它,即在文件系统中为特定文件创建一个归档文件。您需要
ZipOutputStream为所有处理创建一个,并在遍历文件时将它们保存到其中。它看起来像这样:在这种情况下,它被
doZip转换为如下变体: