Javaでシェルを開発しています。このシェルはコマンドを実行でき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
あり (このディレクトリはシステムに属している可能性があります)、このディレクトリを開くことができません。メソッドがこのディレクトリに遭遇すると、失敗します。ディレクトリがシステムに属しており、開くことができないかどうかを確認するにはどうすればよいですか?