File.listFiles()
方法列出文件夹的内容。 然而,在Windows上调用方法时,也会产生一些 – 缺less更好的短语 – “虚拟”文件夹(如“Documents and Settings”,在最近的Windows版本中被“Users”取代) 。
如果你然后为这些“虚拟”文件夹之一调用listFiles(),它总是返回null。 这就是我的问题,因为我想recursion遍历所有的文件夹。 我需要一种方法来过滤这些文件夹,最好不要通过检查他们的名字…
还有一些额外的文件夹,普通用户没有看到(如“系统卷信息”或该驱动器的回收站文件夹),我很乐意find一种方法过滤出来以及没有列入黑名单名字。
不幸的是,这些文件夹的行为就像真正的那样。 我正在寻找的就像是一个File.isSystemFolder()
方法。
我非常感谢任何build议
如果File#isHidden()
返回true
则可以通过测试来过滤这些隐藏的系统文件夹。
我不确定“虚拟”文件夹。 我认为只有在Java 7中才有可能区分它们。我将首先在Vista / Win7机器上进行检查(我现在在XP上)。
更新 :我在我们的2K3服务器做了一个快速测试, 文档和设置默认情况下也会返回true
,而File#isHidden()
而用户不会。 你也可以使用它。
我不认为你会File.isSystemFolder
一个File.isSystemFolder
方法,因为我无法想象将一系列操作系统上的JVMs定义为“系统文件夹”的定义是很容易的能够正确和有用地执行。 正如Balus所建议的,检查非隐藏文件夹是一个好的开始,并且可能已经足够了(因为这复制了他们将在浏览器shell中看到的内容)。
关于“虚拟”文件夹 – 首先,你确定它们是虚拟的吗? 是C:\Documents and Settings
(或更高版本, C:\Users
)不是这个文件夹的真正的,规范的路径? 如果不是,那么通过查看getCanonicalPath().equals(getAbsolutePath())
是否getCanonicalPath().equals(getAbsolutePath())
(只要你准备好多少带有多余的s和s的误报getCanonicalPath().equals(getAbsolutePath())
,就可以很容易地将这些排除在窗口之外。
如果这不起作用,那么他们只是正常的文件夹 – 你需要考虑这些文件夹有什么逻辑属性,使他们“虚拟”。 或者换句话说,拿出一些谓词,可以通过File
上的方法表达,捕捉你想要过滤的东西。 即使我现在还不确定,根据你的英文说明,什么可以,哪些不适合。