使用Java.io.File列出目录内容时出现奇怪的行为

时间:2010-10-16 11:44:02

标签: java file-io

背景的)
我正在使用Java.io.File进行一些Windows目录搜索。基本上用户输入目录路径,我使用file.isDirectory()验证路径。如果路径无效,请让用户重新输入正确的路径。获得有效目录后,我继续执行其他文件操作。

问题的)
现在,当用户进入根目录时会出现问题。例如,e:。在这种情况下,file.list()提供以下输出[.classpath, .project, .settings, bin, src]
正如您所看到的,这不包括任何文件夹。

但是,如果他输入e:\,那么file.list()也会抓取现有目录[$RECYCLE.BIN, <some directories>, <some files>, RECYCLER, System Volume Information]

这次我们没有classpath,project等,但e:e:\都被视为有效目录。

1)有人可以解释这种奇怪的行为吗?

2)另外,为了避免这个问题,有一种比为x:添加脏手动检查并将其转换为x:\更好的方法吗?

3 个答案:

答案 0 :(得分:3)

我希望有些东西会将"e:"解释为卷 e:的当前目录(可能不是根目录)。 Raymond Chen recently covered the history就是这样。

答案 1 :(得分:3)

e:将列出e:drive

中的 CURRENT 目录

e:\将列出e:drive

中的 ROOT 目录

试试这个:

cd c:\windows\system32

dir c:
dir c:.
dir c:\

“c:”与“c:。”相同。

答案 2 :(得分:2)

首先,.settingsbinsrc是ARE文件夹 其次,你真的在​​驱动器e中有这些文件(.classpath,.project等):?

我的猜测是,java没有正确解析“e:”,而file.list()为你提供了jvm当前文件夹下的文件列表,这个文件夹恰好是eclipse项目文件所在的文件夹(全部您提到的那些文件和文件夹属于eclipse项目。)

尝试打开命令行窗口。在我的机器上,它在c:\ Windows \ System32打开。然后输入“cd c:”,看看会发生什么......