【发布时间】:2016-01-29 20:47:09
【问题描述】:
1> 对于一个空目录,linux命令du会显示0 size,这意味着它不使用磁盘空间。正确的? 但是 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
困惑。你能提供一些帮助吗?
【问题讨论】:
-
你用的是哪个版本的java?
-
来自 javadoc
Returns the length of the file denoted by this abstract pathname. The return value is unspecified if this pathname denotes a directory. -
对于您的第一个问题,javadoc 说:如果此路径名表示目录,则返回值未指定。
-
在发布这个问题之前,我已经看到了 javadoc。我只是不清楚“未指定值”的含义。
标签: java