我有一个文件,我已经压制了每个权限。没有人应该能够阅读该文件,对吗?事实上,如果我跑
File f = new File("not_readable.pdf");
System.out.println(f.canRead())
我得到了
false
但是,如果我打电话
File f = new File("not_readable.pdf");
System.out.println(f.length())
我得到了
455074
我的理解是,为了获得文件的大小,必须首先打开并读取文件,但这个结果强烈暗示我错了。有谁知道为什么会这样?另外,有没有办法阻止Java的file.length()方法访问文件的大小?
我正在使用Ubuntu 12.10
答案 0 :(得分:16)
你错了:文件的长度是文件系统元数据(至少对于在Linux VFS下运行的文件系统)。任何对目录具有读取权限的人都可以看到所有包含的文件及其大小。为了防止用户看到文件的大小,您必须阻止他们完全看到它,即如果用户不在与目录关联的组中,则将文件放在具有drwxr-x---
权限的目录中,或{ {1}}如果用户在该组中。
答案 1 :(得分:2)
我不明白为什么你需要读取权限才能查看文件的大小。在Linux中,ls
将显示目录中所有文件的内容(包括其大小),即使您对它们没有权限,只要您对包含该文件的目录具有适当的权限即可。文件大小是文件分配表的属性,而不是文件本身的属性,因此length()
不需要检查实际文件本身(并且通过计算它来获取长度是非常低效的。文件中的字节数。)