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

TrueZip - How to get Size of a Folder within an Zip Archive

有没有办法在不执行 TrueZip 的情况下获取文件夹的大小 我自己递归?我担心运行时,因为我正在处理包含大量文件的存档。

使用 TrueZip 7.7.9

OK,这里是一个简单的测试,只使用标准 Java 7 API;它为 zips 使用捆绑的 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 文件的大小;无需解压。

你用Java7;因此,您想要做的可能是使用 FileVisitor 为您计算所有常规文件的大小。

这里我使用了 Files.size();请注意,在 FileVisitor 中,当您访问不是目录的文件系统条目时,您会看到一个 BasicFileAttributes 的实例,您可以从中检索 size().

Java文档here;并使用 Files.walkFileTree().

使用Java 8,这就简单多了,你可以用Files.find()代替。