Хочу написать пару десятков строк кода для пересчета папок и файлов, но столкнулся с такой проблемой: не срабатывает блок if(BasicFileAttributes.isSymbolicLink())
при нахождении на симлинк. Вместо этого обрабатывается блок if(BasicFileAttributes.isDirectory())
и всё зацикливается если симлинк указывает на папку которая уже обработана.
Вопрос: как правильно организовать обработку символьных ссылок?
public class Main {
static long dirsCount = 0;
static long filesCount = 0;
public static void main(String[] args) throws IOException {
File root = new File("/");
showFiles(root);
System.out.println("Dirs: " + dirsCount);
System.out.println("Files: " + filesCount);
}
public static void showFiles(File parent) throws IOException {
File[] chieldFiles = parent.listFiles();
for (File chield : chieldFiles){
Path path = Paths.get(chield.toURI());
BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class);
try {
if (attr.isSymbolicLink()) {
System.out.println(chield.getAbsolutePath());
} else if (attr.isDirectory()) {
System.out.println(chield.getAbsolutePath());
dirsCount++;
showFiles(chield);
} else {
System.out.println(chield.getAbsolutePath());
filesCount++;
}
}catch (Exception e){
}
}
}
}
Вам надо добавить третий параметр LinkOption.NOFOLLOW_LINKS
в вызов функции Files.readAttributes()
иначе все symlink
возвращаются разрезолвленые, т.е. возвращаются конкретные объекты файловой системы.
BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытался написать "калькулятор" и что бы фрэйм и слушатель были в отдельных классах, но что то ничего не происходит при проверке, то есть кнопка...
ПриветствуюСовсем недавно познакомился с JS и вот недавно потребовалось написать небольшой скрипт для переключения контента
у меня такая проблема c modx кодировке русский текст вообще не работает я установил modx и что то кодировка не работает и в сайте и в админке http://wwwpb-gip