0

有没有办法用 TrueZip 获取文件夹的大小而不用自己递归地做呢?我担心运行时,因为我正在处理包含大量文件的档案。

使用 TrueZip 7.7.9

4

1 回答 1

1

好的,这是一个仅使用标准 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()改用它。

于 2016-02-10T18:06:54.700 回答