gpt4 book ai didi

java - 为什么对于目录,使用 java 和 'du -sk' 计算的已用空间不同?以及 'du -sk' 的确切 java 替代方案是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:10 27 4
gpt4 key购买 nike

为什么使用 java 和“du -sk”计算目录的已用空间不同?以及“du -sk”的确切 java 替代方案是什么?

PFB Java 代码,

<小时/>
    final String location = "/home/bhlabhla";
final Path path = Paths.get(location);

final Process process = Runtime.getRuntime().exec("du -sk " + location);
final BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
System.out.println("used space [du -sk]");
while ((line = br.readLine()) != null) {
System.out.println(line);
}

System.out.println("***************************");
// 1
System.out.println("used space [Recursion]:" + getFolderSize(new File(location)) / 1024);
// 2
final long size = Files.walk(path).mapToLong(p -> p.toFile().length()).sum();
System.out.println("used space [Java 8]:" + size / 1024);



public static long getFolderSize(final File dir) {
long size = 0;
for (final File file : dir.listFiles()) {
if (file.isFile()) {
size += file.length();
} else {
size += getFolderSize(file);
}
}
return size;
}

输出,

已用空间[du -sk]

83164000/home/bhlabhla

<小时/>

已用空间[递归]:83151664

已用空间[Java 8]:83153560

最佳答案

区别在于,du将始终打印真实的磁盘使用情况,而其中存储的信息可能更大或更小。

稀疏文件(您可以查找它们)可能会在少量磁盘存储中存储看似很大的文件。

硬链接(hard link)(您可以查找它们)可能会在其中一个文件的位置存储多个文件。

block 大小(您可以查找它们)可能会在每个文件末尾浪费一些字节,因此文件需要比其包含的更多的存储空间。

关于java - 为什么对于目录,使用 java 和 'du -sk' 计算的已用空间不同?以及 'du -sk' 的确切 java 替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38847177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com