【发布时间】:2010-11-06 19:19:48
【问题描述】:
有没有办法在整个计算机中搜索表示 Java 中文件名的字符串值?这将不知道计算机上驱动器的名称。
【问题讨论】:
有没有办法在整个计算机中搜索表示 Java 中文件名的字符串值?这将不知道计算机上驱动器的名称。
【问题讨论】:
您可以通过查看文件名、递归地获取目录(如果是目录)等来遍历文件系统。
如果症结在于如何获取计算机上的驱动器,请查看 File.listRoots() 函数以获取驱动器号列表。
预计到达时间:
为了绝对安全,您需要对递归处理进行一些限制。文件系统中可能存在带有符号链接等的循环(尤其是在 LINUX/UNIX 中,但第三方工具也可以在 Windows 中启用此功能)。
为确保在处理符号链接时不会陷入循环,请使用 File.getCanonicalPath 方法获取目录的“真实”路径并跟踪所有访问过的规范路径。您还可以使用 getCanonicalFile 并跟踪所有文件,但这可能不是必需的,除非您真的想避免偶尔会处理同一文件两次的情况。
【讨论】:
您可以使用 File 对象来确定您正在查看的是文件还是目录:
File file = new File("/"); //root
然后,当您递归(或根据您的喜好进行迭代)时,您将进行简单的检查:
if(tempFile.isDirectory())
//do recursive call on that directory
else
//perform check on file name
【讨论】:
可以对整个文件系统使用递归调用:可以使用java.io.File的以下方法:
listRoots():列出根文件(在 Windows 中是驱动器,在 Mac OS X 和 linux 中是 '/')。
listFiles():列出目录的封闭文件
【讨论】:
也不要忘记递归处理中的异常。由于访问权限限制,某些文件夹可能无法访问。另外,Windows 系统文件夹“系统卷信息”无法在 Windows 资源管理器中输入,所以我想如果您尝试以编程方式进入,它会抛出异常。
【讨论】: