有没有办法用 TrueZip 获取文件夹的大小而不用自己递归地做呢?我担心运行时,因为我正在处理包含大量文件的档案。
使用 TrueZip 7.7.9
好的,这是一个仅使用标准 Java 7 API 的简单测试;它对 zip 使用捆绑的 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;因此,您想要做的可能是使用 aFileVisitor
为您计算所有常规文件的大小。
在这里,我做了一个粗略的 hack,它使用Files.size()
; 请注意,在 a 中FileVisitor
,当您访问不是目录的文件系统条目时,您有一个实例BasicFileAttributes
,您可以从中检索size()
.
Javadoc在这里;并使用Files.walkFileTree()
.
使用 Java 8,这要简单得多,您可以Files.find()
改用它。