为什么java文件#list()不能在Windows连接点上工作?
我在Windows 8上
用于File#list()
的Javadoc声明它“如果这个抽象路径名不表示目录,或者如果发生I/O错误,则返回null。”
现在,以“目录”(实际上是一个NTFS连接)“应用程序数据”(位于C:\Users\[Username]目录)为例
对“应用程序数据”调用File#isDirectory()
返回true
。然而,每次对“应用程序数据”调用File#list()
都会返回null。。。所以这不是I/O错误
基本上,这会使File#isDirectory()
成为一个无用的调用,并迫使您检查File#list() != null
,如果您想确保File
确实是一个目录
除非我错了,否则没有其他方法可以“确定”一个文件是否实际上是一个目录File#list()
是一个非常昂贵的方法调用,如果你在文件系统的每个文件夹上都这样做的话
下面是一个Java文件,它举例说明了这个问题:http://pastebin.com/ieH0xTek 它只能在Windows上工作
# 1 楼答案
隐藏的系统连接(例如
Local Settings
或Application Data
)are special:这意味着无法以标准方式遍历它们(由于安全设置)。不幸的是,没有办法通过旧的Java File API处理这些连接
使用Java 7的NIO.2 file system API应该可以检测这些链接,并可能解析它们的目标路径