【发布时间】:2021-02-24 21:48:59
【问题描述】:
我有一个文件夹,其中包含一系列 Zip 文件。我正在尝试遍历文件夹并计算每个 zip 文件中的文件数。我已经创建了两段代码,我只是不确定如何将它们放在一起以获得我想要的结果。两个代码都放在 try/catch 块中,它们都可以完美地独立工作。这是使用 Eclipse,用 Java 编写的。
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.zip.ZipFile;
import java.io.File;
import java.util.List;
public class KZF {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Try/Catch Block counts the number of files within a given zip file
try {
ZipFile zipFile = new ZipFile(
"C:\\Users\\username\\Documents\\Temp\\AllKo\\Policy.zip");
int NumberOfFiles = zipFile.size() - 1;
// String name = zipFile.getName();
Path path = Paths
.get("C:\\Users\\username\\Documents\\Temp\\AllKo\\Policy.zip");
Path filename = path.getFileName();
System.out.print("The number of files in: ");
// System.out.print(name);
System.out.print(filename.toString());
System.out.print(" are: ");
System.out.print(NumberOfFiles + " file(s)");
zipFile.close();
}
catch (IOException ioe) {
System.out.println("Error opening zip file" + ioe);
}
// ----------------------------------------------------------------------------------------------------------
// Creates list of every file specified folder
String dirLocation = "C:\\Users\\username\\Documents\\Temp\\AllKo";
try { List<File> files = Files.list(Paths.get(dirLocation))
.map(Path::toFile) .collect(Collectors.toList());
files.forEach(System.out::println);
} catch(IOException e) { Error }
}
}
【问题讨论】:
-
对 ZIP 文件中的文件进行计数的第一部分可能应该是一个单独的方法,带有
Path参数和int返回类型,然后您从循环中调用目录中的 ZIP 文件.但请注意,ZipFile.size()返回条目数,ZIP 文件也可能包含目录(即非文件)条目。另外调用Files.list(...).collect(...)不会关闭由Files.list(...)创建的Stream另请参阅stackoverflow.com/q/26997240;您必须使用try-with-resources和Files.list(...)作为资源。
标签: java file directory path zip