2013-08-25 2 views
0

Я пытаюсь написать метод с использованием Java, который будет рекурсивно искать .exe-файлы. Проблема, с которой я сталкиваюсь, заключается в том, когда дело доходит до каталога «C: \ Program Files (x86) \ Google \ CrashReports»Проблемы с разрешением файла Java

Кажется, что независимо от того, что я пытаюсь, я всегда получаю исключение NullPointerException из-за этого файла. Я попытался удостовериться, что я либо не добавляю его в список файлов, которые будут рекурсивно проверены, либо, по крайней мере, пропустить его, если он попадает в список файлов, подлежащих проверке.

В его нынешнем виде мой код неверен, однако это может быть вполне логичным ошибочным, я бы очень признателен за объяснение того, как Java считает, что он может читать этот файл.

private static List<String> exefiles = new ArrayList<String>(); 
public void findExe(File rootDir) throws SecurityException, IOException{ 
    List<File> files = new ArrayList<File>(Arrays.asList(rootDir.listFiles())); 
    List<File> directories = new ArrayList<File>(); 
    Iterator<File> iterator = files.iterator(); 
    if(files.size() > 0){ 
     while(iterator.hasNext()){ 
      File currentFile = iterator.next(); 
      if(currentFile.getName().endsWith(".exe")){ 
       exefiles.add(currentFile.getAbsolutePath()); 
      }else if(currentFile.isDirectory()){ 
       if(currentFile.canRead()){ 
        System.out.println("We can read " + currentFile.getAbsolutePath()); 
        if(currentFile.listFiles().length > 0){ 
         System.out.println(currentFile.getAbsolutePath() + " has a length greater than 0"); 
         directories.add(currentFile); 
        }else{System.out.println(currentFile.getAbsolutePath() + " does not have any files in it");} 
       }else{ 
        System.out.println("Could not add " + currentFile.getAbsolutePath() + " to directories because it could not be read"); 
       } 
      }else; 
     } 
    } 

Когда я открываю файлы свойств с Windows, система и группы администраторов имеют полный контроль, в то время как группа пользователей имеет только «специальные разрешения.»

Я знаю, что Java 7 предоставляет более простые способы обработки атрибутов через пакет java.nio.file, но этот вариант не подходит для моих нужд.

+0

Почему вы в том числе, что 'еще,'? Какова полная трассировка стека исключения? – Jeffrey

+0

Пожалуйста, разместите всю трассировку стека, а не просто общее описание проблемы, которую вы испытываете. – chrylis

ответ

2

listFiles возвращает null, если вы не передадите ему каталог, или если вы передадите ему что-то, с чем он не сможет справиться должным образом, например, точкой соединения. Использование других пакетов может быть проверено, если вы смотрите на точку соединения, но вы не можете сделать это с помощью базового API файлов. Так что, как говорится, вы можете вместо этого просто сделать быструю проверку недействительности, поэтому изменить

}else if(currentFile.isDirectory()){ 

в

}else if(currentFile.isDirectory() && currentFile.listFiles()!=null){ 
+1

Вы - ученый и джентльмен, сэр. Спасибо. – davelupt

+0

Мне нравится думать так. Пожалуйста. – chiliNUT