1>对于一个空目录,linux命令du将显示0大小,这意味着它不使用磁盘空间。对? 但java中的File.length()不会显示为零,而是显示空目录使用了一些字节。
如果确实Unix中的所有内容都是文件而且占用磁盘空间,那么Java就在这里,为什么du显示其0块。
如果它应该是0个块,那么为什么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使用的块和File.length()使用的字节?
$ du -h oneline.txt
4.0K oneline.txt
$ du oneline.txt
8 oneline.txt
$ ls -s oneline.txt
8 oneline.txt
-s显示每个文件实际使用的文件系统块数,以512字节为单位,其中部分单位向上舍入为下一个整数值。如果输出到终端,则在列出之前的行上输出所有文件大小的总和。环境变量BLOCKSIZE会覆盖512字节的单位大小。
File f = new File("/test/oneline.txt");
if (f.exists() && f.isFile()) {
System.out.println(f.length());
}
26
困惑。请你帮个忙吗?
答案 0 :(得分:8)
因为du
命令具有不同的用途,因为其 man 页面显示。它显示文件使用的磁盘空间大小,包括部分空块。这与文件的大小不同,后者是它包含的数据量。
答案 1 :(得分:4)
在Linux / Unix系统上,有一个"块大小"的概念。此块大小是操作系统可以处理文件的最小空间量。 du报告块大小,而不是确切的文件大小。这是文件在操作系统上占用的空间,而不是文件的大小。
du实用程序显示文件系统块使用情况...
为了澄清,让我们说我的块大小= 4 KB(这是相当普遍的。)如果我创建一个2 KB的文本文件,那么文件的大小是2 KB,但是文件在系统上占用的空间为4 KB,因为这是操作系统可以分发的最小数量。
同样,如果我创建了一个11 KB的文件,那么文件大小为11 KB,但实际上需要12 KB。这是因为我们需要3个块才能保存文件。
:编辑:stat -f将以字节为单位显示驱动器上的块大小。例如,
stat -f /dev/sda1
...
File: "/dev/sda1"
Block size: 4096
...
然后,您可以将其与ls -ls配对,以提供包含文件使用的块数的目录列表。这些块是最左边的列。
ls -ls
1 -rw-r--r--. 1 brasmussen someGroup 0 Jan 29 16:24 f1
你可以在这里看到即使是文件" f1"大小为0字节,它仍占用一个块。因此,其OS大小为4KB,文件大小为0KB。
答案 2 :(得分:1)
Directories are just special cases of files并且两者都是inode
的特化,即使它们不包含任何内容,它们也会占用磁盘空间。磁盘上必须有一些东西来表示目录的存在,它的权限和其他簿记。所以目录是用尽磁盘但没有长度的文件,因为它们什么都没有。
您正在将苹果和橙子与预期不会返回相同结果的程序进行比较,因为它们会计算并报告不同的内容。
答案 3 :(得分:0)
块大小是Linux和Windows共有的功能。它是由文件系统的工作方式引起的,而不是特定于Java的。由于处理空间的方式,块可以被不超过一个文件占用。
创建一个新的文本document.txt,在其中写入一个字符并检查文件大小。它将显示1字节的大小和磁盘4 Kb的大小。