Joa*_*uer 58
使用Files.size(Path)得到一个文件的大小.
对于目录的大小(意味着包含在其中的所有文件的大小),你仍然需要手动递归,据我所知.
这是一个准备运行的示例,它也将跳过并记录它无法输入的目录.它用于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();
}
Run Code Online (Sandbox Code Playgroud)
MutableLong size = new MutableLong();
Files.walkFileTree(directoryPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
size.add(attrs.size());
}
}
Run Code Online (Sandbox Code Playgroud)
这将计算目录中所有文件的大小.但请注意,目录中的所有文件都需要是常规文件,因为API指定BasicFileAttributes的size方法:
"非常规文件的文件大小是特定于实现的,因此未指定."
如果你偶然发现了不受管制的文件,你将要么不包括它的大小,要么返回一些未知的大小.您可以检查文件是否是常规文件
BasicFileAttributes.isRegularFile()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23659 次 |
| 最近记录: |