有没有办法使用TrueZip获取文件夹的大小而不这样做 我递归?我很关心运行时,因为我正在处理包含大量文件的档案。
使用TrueZip 7.7.9
答案 0 :(得分:1)
好的,这是一个只使用标准Java 7 API的简单测试;它使用捆绑的JSR 203实现拉链:
public final class Test
{
public static void main(final String... args)
throws IOException
{
final Path zip = Paths.get("/home/fge/t.zip");
final URI uri = URI.create("jar:" + zip.toUri());
try (
final FileSystem fs = FileSystems.newFileSystem(uri, Collections.emptyMap());
final DirectoryStream<Path> stream = Files.newDirectoryStream(fs.getPath("/"));
) {
for (final Path entry: stream)
System.out.println(Files.size(entry));
}
}
}
上面的zip只包含顶级文件,而不是目录。
这意味着您可以使用此API正确计算zip文件的大小;无需解压缩。
您使用Java 7;因此,你想要做的就是使用FileVisitor
来计算所有常规文件的大小。
我在这里做了一个使用Files.size()
的粗暴黑客;请注意,在FileVisitor
中,当您访问不是目录的文件系统条目时,您有一个BasicFileAttributes
实例,您可以从中检索size()
。
Javadoc here;并使用Files.walkFileTree()
。
使用Java 8,这要简单得多,您可以改用Files.find()
。