有没有一种不用递归地使用TrueZip获取文件夹大小的方法?我担心运行时,因为我正在处理包含大量文件的档案。
使用TrueZip 7.7.9
发布于 2016-02-10 18:06:54
好的,下面是一个简单的测试,它只使用标准的Java7API;它使用绑定的JSR 203实现来实现zip:
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 这里;并使用Files.walkFileTree()。
使用Java 8,这要简单得多,您可以使用Files.find()代替。
https://stackoverflow.com/questions/35295133
复制相似问题