Я разрабатываю оболочку на 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
(этот каталог может принадлежать системе), и я не могу открыть этот каталог. Когда метод встречается с этим каталогом, он терпит неудачу. Как проверить, принадлежит ли каталог системе и не может быть открыт?
Он может не охватывать все случаи неприкрытых каталогов, но вы можете проверить, есть ли файл # isHidden() '. – Vulcan
Вместо использования 'file.isFile() == true' просто используйте' file.isFile() '. Или если вы пытаетесь увидеть, что-то «ложь»: 'dir.canRead() == false', просто используйте'! Dir.canRead() '. – Jeffrey
@Jeffrey: Я знаю крупное предприятие (> 60000 человек), где if (bool = true) является обязательным, и если (b) запрещено ... – Aubin