(背景的)
我正在使用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:\
更好的方法吗?
答案 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)
首先,.settings
,bin
和src
是ARE文件夹
其次,你真的在驱动器e中有这些文件(.classpath,.project等):?
我的猜测是,java没有正确解析“e:”,而file.list()为你提供了jvm当前文件夹下的文件列表,这个文件夹恰好是eclipse项目文件所在的文件夹(全部您提到的那些文件和文件夹属于eclipse项目。)
尝试打开命令行窗口。在我的机器上,它在c:\ Windows \ System32打开。然后输入“cd c:”,看看会发生什么......