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()
代替。
有没有办法在不执行 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()
代替。