Обработка символьных ссылок в Java

216
11 июня 2017, 16:54

Хочу написать пару десятков строк кода для пересчета папок и файлов, но столкнулся с такой проблемой: не срабатывает блок 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){
            }
        }
    }
}
Answer 1

Вам надо добавить третий параметр LinkOption.NOFOLLOW_LINKS в вызов функции Files.readAttributes() иначе все symlink возвращаются разрезолвленые, т.е. возвращаются конкретные объекты файловой системы.

BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS)
READ ALSO
калькулятор java. в чем ошибка?

калькулятор java. в чем ошибка?

Пытался написать "калькулятор" и что бы фрэйм и слушатель были в отдельных классах, но что то ничего не происходит при проверке, то есть кнопка...

232
Переключатель контента на JavaScript

Переключатель контента на JavaScript

ПриветствуюСовсем недавно познакомился с JS и вот недавно потребовалось написать небольшой скрипт для переключения контента

395
у меня такая проблема c modx кодировке

у меня такая проблема c modx кодировке

у меня такая проблема c modx кодировке русский текст вообще не работает я установил modx и что то кодировка не работает и в сайте и в админке http://wwwpb-gip

291