Java - file.length()即使文件不可读也会返回

una*_*ria 9 java linux filesystems operating-system ubuntu-12.10

我有一个文件,我已经压制了每个权限.没有人应该能够阅读该文件,对吗?事实上,如果我跑

File f = new File("not_readable.pdf");
System.out.println(f.canRead())
Run Code Online (Sandbox Code Playgroud)

我明白了

false
Run Code Online (Sandbox Code Playgroud)

但是,如果我打电话

File f = new File("not_readable.pdf");
System.out.println(f.length())
Run Code Online (Sandbox Code Playgroud)

我明白了

455074
Run Code Online (Sandbox Code Playgroud)

我的理解是,为了获得文件的大小,必须首先打开并读取文件,但这个结果强烈暗示我错了.有谁知道为什么会这样?另外,有没有办法阻止Java的file.length()方法访问文件的大小?

我正在使用Ubuntu 12.10

us2*_*012 16

你错了:文件的长度是文件系统元数据(至少对于在Linux VFS下运行的文件系统).任何对目录具有读取权限的人都可以看到所有包含的文件及其大小.为了防止用户看到文件的大小,您必须阻止他们完全看到它,即将文件放在具有权限的目录中,例如,drwxr-x---如果用户不在与目录关联的组中,或者drwx------用户是否在组.