Массив Java List, показывающий несуществующие папки. Почему? - PullRequest
1 голос
/ 06 февраля 2012

Я нахожусь в процессе создания программы, которая позволяет вам просматривать вашу файловую систему. Я тестировал его и столкнулся с проблемой: он говорил, что папка «Documents and Settings» находится на моем диске C: \, а его там нет.

Вот так я получаю массив файлов:

File f = new File(path); //path being a path sent by the client, for example C:\
            if(f.isFile()){
                //TODO start downloading it.
                out.println("ERR: no dir!");
                return;
            }
            Server.log.log("System path requested: " + f.getAbsolutePath());
            File[] files = f.listFiles();
            for(int i = 0; i < files.length; i++){
                File found = files[i];
                if(!found.exists()){
                    continue;
                }
                if(found.isDirectory()){
                    out.println("dir:" + found.getName());
                }else{
                    out.println(found.getName());
                }
                System.out.println("Printed " + found.getName());
            }
            out.println("ENDOFLIST"); //Notify the client it has to stop receiving data

По некоторым причинам это приводит к выводу довольно большого количества каталогов, которые я не могу найти даже при включенной опции «Показывать скрытые папки».

Пытаясь получить доступ к этим каталогам, он пытается прочитать содержимое каталога, но поскольку каталог не существует, он выдает исключение, в результате чего никакие данные не отправляются через сокеты, и мой клиент зависает.

Мой вопрос: есть ли способ проверить, действительно ли файл / каталог существует? Обратите внимание, если вы посмотрите на мой блок кода, если файл / dir не существует, он уже продолжается вместо записи в сокет.

Я дал ему гугл, но совпадений не найдено. Кроме того, я попробовал функцию поиска, но ничего подобного не придумал.

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

Это скрытые системные папки.
Они существуют. На самом деле.

Вы получаете исключения, потому что многие из них не имеют доступа для чтения.

1 голос
/ 06 февраля 2012

Я предлагаю использовать новый API ввода-вывода Fil, представленный в Java 7, в нем значительно улучшена поддержка функций, предлагаемых конкретной файловой системой. Он также предлагает возможность использовать дерево файлов.

Взгляните на FileVisitor http://docs.oracle.com/javase/7/docs/api/java/nio/file/FileVisitor.html, который очень вам поможет.

...