我使用的是 Windows 8。
File#list()
的 Javadoc 声称它“如果此抽象路径名不表示目录,或者发生 I/O 错误,则返回 null。”
现在,以“目录”(实际上是 NTFS 结点)“应用程序数据”(位于 C:\Users\[用户名] 目录中)为例。
在“应用程序数据”上调用 File#isDirectory()
返回 true
。但是,每次在“应用程序数据”上调用 File#list()
都会返回 null...所以这不是 I/O 错误。
基本上,这会使 File#isDirectory()
成为一个无用的调用,如果您想确保File
确实是一个目录。
除非我错了,否则没有其他方法可以“确定”地检查一个文件是否真的是一个目录? File#list()
是一个非常昂贵的方法调用,如果你对文件系统上的每个文件夹都这样做的话。
这是一个 Java 文件,它举例说明了这个问题: http://pastebin.com/ieH0xTek 它仅适用于 Windows。
最佳答案
隐藏的系统连接(例如Local Settings
或Application Data
)are special :
These junction points have file attributes of FILE_ATTRIBUTE_REPARSE_POINT and FILE_ATTRIBUTE_SYSTEM, and the access control lists (ACLs) must be set to "“Everyone Deny Read". Applications must have permissions in order to call out and traverse a specific path. However, enumerating the contents of these junction points is not possible.
这意味着它们不能以标准方式遍历(由于安全设置)。不幸的是,无法通过旧的 Java File API 处理这些连接点。 .
使用 Java 7 NIO.2 file system API应该可以检测到这些链接并可能解析它们的目标路径。
关于java - 为什么 java File#list() 不能在 Windows 连接点上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19327942/