TrueZip - 如何获取Zip存档中文件夹的大小

时间:2016-02-09 14:55:14

标签: java size directory truezip

有没有办法使用TrueZip获取文件夹的大小而不这样做 我递归?我很关心运行时,因为我正在处理包含大量文件的档案。

使用TrueZip 7.7.9

1 个答案:

答案 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()