我正在用Java开发一个shell。该shell可以执行命令find 'regex'
。此命令以递归方式查找名称与regex
匹配的所有文件。找到文件的方法是:
public void findFile(String regExp, String dirName) {
File dir = new File(dirName);
if (dir.canRead() == false)
return;
File[] files = dir.listFiles();
for (File file : files) {
if (file.isFile() == true)
if (file.getName().matches(regExp) == true)
System.out.println(file.getAbsolutePath());
if (file.isDirectory() == true && file.canRead() == true) {
findFile(regExp, file.getAbsolutePath());
}
}
}
但是如果无法打开目录,则此命令会失败。例如,在D:
分区中,我有一个名为found.00
的隐藏目录(此目录可能属于系统),我无法打开此目录。当方法遇到此目录时,它将失败。如何检查目录是否属于系统且无法打开?
答案 0 :(得分:4)
当您使用file.canRead()
时,我会说您可以使用try-catch包围方法findFile(String regExp, String dirName)
的完整内容。然后,您可以捕获并记录或忽略访问错误。请尝试以下方法。
public void findFile(final String regExp, final String dirName) {
try {
final File dir = new File(dirName);
if (dir.canRead() == false) {
return;
}
final File[] files = dir.listFiles();
for (final File file : files) {
if (file.isFile() && file.getName().matches(regExp)) {
System.out.println(file.getAbsolutePath());
}
if ((file.isDirectory()) && (file.canRead())) {
findFile(regExp, file.getAbsolutePath());
}
}
} catch (final IOException ignore) {
System.out.println("No access to '"+dirName+"'.");
}
}