Я нахожусь в процессе создания программы, которая позволяет вам просматривать вашу файловую систему.
Я тестировал его и столкнулся с проблемой: он говорил, что папка «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 не существует, он уже продолжается вместо записи в сокет.
Я дал ему гугл, но совпадений не найдено. Кроме того, я попробовал функцию поиска, но ничего подобного не придумал.