gpt4 book ai didi

java - 为什么 Java 中 File.length() 的大小与 linux du 命令的大小不同

转载 作者:行者123 更新时间:2023-11-29 09:40:35 25 4
gpt4 key购买 nike

1> 对于空目录,linux 命令du 将显示0 大小,这意味着它不使用磁盘空间。正确的?但是 Java 中的 File.length() 不会显示零,而是显示空目录使用了一些字节。

如果 Unix 中的一切都是文件并且应该占用磁盘空间,那么 Java 就在这里,为什么 du 显示它的 0 block 。

如果它应该是 0 个 block ,那么为什么 Java 会显示一些被空目录使用的字节?

$ mkdir empty_directory
$ du -h empty_directory/
0B empty_directory/
$ du empty_directory
0 empty_directory


File f = new File("/test/empty_directory");
if (f.exists() && f.isDirectory()) {
System.out.println(f.length());
}

68

2> 对于同样的无空文件,linux命令du显示的大小仍然与java中的File.length()显示的大小不一样。
原因是否仅来自不同的单位:du 使用的 block 和 File.length() 使用的字节?

$ du -h oneline.txt 
4.0K oneline.txt
$ du oneline.txt
8 oneline.txt
$ ls -s oneline.txt
8 oneline.txt

-s 显示每个文件实际使用的文件系统 block 数,以512字节为单位,部分单位四舍五入到下一个整数值。如果输出到终端,所有文件大小的总和将在列表之前的一行中输出。环境变量 BLOCKSIZE 覆盖了 512 字节的单元大小。

File f = new File("/test/oneline.txt");
if (f.exists() && f.isFile()) {
System.out.println(f.length());
}

26

困惑。你能帮忙吗?

最佳答案

因为 du 命令有不同的用途,如其 man 页面所示。它显示文件使用 了多少磁盘空间,包括部分空 block 。这不同于文件的大小,即文件包含的数据量。

关于java - 为什么 Java 中 File.length() 的大小与 linux du 命令的大小不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35093756/

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