有没有办法在整个计算机中搜索表示Java中文件名的String值?这可能是不知道计算机上驱动器的名称。
答案 0 :(得分:6)
您可以通过查看文件名,以递归方式获取内容(如果它是目录等)来遍历文件系统。
如果关键点是如何获取计算机上的驱动器,请查看File.listRoots()函数以获取驱动器号的列表。
ETA:
为绝对安全,您需要在递归处理中包含一些限制。可以在文件系统中使用符号链接等(特别是在LINUX / UNIX中,但第三方工具也可以在Windows中启用它)。
为了确保在处理符号链接时没有进入循环,请使用File.getCanonicalPath方法获取目录的“真实”路径并跟踪所有访问的规范路径。您也可以使用getCanonicalFile并跟踪所有文件,但这可能不需要,除非您真的想要避免偶尔会处理同一文件两次的实例。
答案 1 :(得分:2)
您可以使用File对象来确定您是在查看文件还是目录:
File file = new File("/"); //root
然后,当您递归(或根据您的偏好进行迭代)时,您可以进行简单的检查:
if(tempFile.isDirectory())
//do recursive call on that directory
else
//perform check on file name
答案 2 :(得分:1)
也不要忘记递归处理中的异常。由于访问权限限制,某些文件夹可能无法访问。此外,Windows系统文件夹“系统卷信息”无法在Windows资源管理器中输入,因此我认为如果您尝试进入programmaticaly,它将引发异常。
答案 3 :(得分:0)
您可以在整个文件系统中使用递归调用:您可以使用java.io.File
的以下方法:
listRoots()
:列出根文件(在Windows中它是驱动器,在Mac OS X和Linux上是'/')。
listFiles()
:列出目录的封闭文件