如何使用java7中的新NIO获取文件或目录的大小?
发布于 2011-08-31 18:24:01
使用Files.size(Path)获取文件的大小。
就我所知,对于目录的大小(即其中包含的所有文件的大小),您仍然需要手动递归。
发布于 2013-11-09 06:02:11
下面是一个可以运行的示例,它还将跳过并记录它不能进入的目录。它使用java.util.concurrent.atomic.AtomicLong来累积状态。
public static void main(String[] args) throws IOException {
Path path = Paths.get("c:/");
long size = getSize(path);
System.out.println("size=" + size);
}
static long getSize(Path startPath) throws IOException {
final AtomicLong size = new AtomicLong(0);
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
size.addAndGet(attrs.size());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc)
throws IOException {
// Skip folders that can't be traversed
System.out.println("skipped: " + file + "e=" + exc);
return FileVisitResult.CONTINUE;
}
});
return size.get();
}发布于 2011-12-13 00:11:12
MutableLong size = new MutableLong();
Files.walkFileTree(directoryPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
size.add(attrs.size());
}
}这将计算目录中所有文件的大小。但需要注意的是,目录下的所有文件都需要是普通文件,因为接口指定了BasicFileAttributes的大小方法:
“非常规文件的大小是特定于实现的,因此未指定。”
如果遇到不规范的文件,要么不包含它的大小,要么返回一些未知的大小。您可以使用以下命令检查文件是否正常
BasicFileAttributes.isRegularFile()https://stackoverflow.com/questions/7255592
复制相似问题