2016-11-11 2 views
0

Я пытаюсь найти все файлы, которые были названы, в выбранном мной каталоге. Код, который у меня есть, работает, когда я делаю что-то вроде C:\Program Files, или C:\Users. Но когда я делаю c:/, я застреваю в корзине и получаю java.lang.NullPointerException и останавливается на c:\$Recycle.Bin\S-1-5-21-1478355014-127360780-1969717230-1002144.Как обойти недоступные файлы?

public void DirectorySerch(String target, String dirName){ 
    File f = new File(dirName); System.out.println("H"); 
    if(!f.isDirectory()){ 
     throw new IllegalArgumentException("that is not a valid directory"); 
    } 
    for(File folderItem : f.listFiles()){ 
     if(folderItem.isDirectory()){ 
      System.out.println(folderItem.getAbsolutePath()); 
      if(!folderItem.equals("")){ 
       DirectorySerch(target,folderItem.getPath()); 
      } 
      // Return the result if it is not empty 
      /* if (!result.equals(folderItem.getName())){ 
      files[filesFounfd] = folderItem.getAbsolutePath(); 
      filesFounfd++; 
      }*/ 
     }else{ 
      if(folderItem.getName().equals(target)){ 
       files[filesFounfd] = folderItem.getAbsolutePath(); 
       System.out.println(folderItem.getAbsolutePath()); 
       filesFounfd++; 
      } 
     }   
    } 
} 

Что я могу сделать, чтобы не получить этот вопрос, как он работает в тех случаях, когда не приходится иметь дело с корзиной?

+0

Как насчет добавления ', если («$ Recycle.Bin».equals (Dirname)) return; 'к началу вашего метода? –

+0

Ваш код не скомпилирован - несколько объявлений переменных отсутствуют. Вам нужна помощь, поэтому вам должно помочь людям помочь вам, предоставив код, который можно скомпилировать и выполнить, с образцом ввода, который демонстрирует ваши проблемы. Вы также никогда не упоминали, откуда происходит исключение NullPointerException. Скорее всего, если вы это сделали, вы бы уже решили проблему самостоятельно. –

ответ

1
for(File folderItem : f.listFiles()){ 

Проблема здесь. listFiles() может возвращать нуль, и весь этот синтаксис может сделать с этим - это выброс NPE. Изменить на:

File[] files = f.listFiles(); 
if (files != null) { 
    for(File folderItem : files){ 
-1

так получается, вы можете это исправить, сделав попробовать поймать вокруг петли для

public void DirectorySerch(String target, String dirName) { 
    File f = new File(dirName); 
    System.out.println("H"); 
    if (!f.isDirectory()) { 
     throw new IllegalArgumentException("that is not a valid directory"); 
    } 
    try { 
     for (File folderItem : f.listFiles()) { 
      if (folderItem.isDirectory()) { 
       System.out.println(folderItem.getAbsolutePath()); 
       if (!folderItem.equals("")) { 
        DirectorySerch(target, folderItem.getPath()); 
       } 
      } else { 
       if (folderItem.getName().equals(target)) { 
        files[filesFounfd] = folderItem.getAbsolutePath(); 
        System.out.println(folderItem.getAbsolutePath()); 
        filesFounfd++; 
       } 
      } 
     } 
    }catch(NullPointerException sd){ 

    } 
} 
+0

Предполагая, что каждое 'NullPointerException' можно игнорировать, а не только тот, который вызвал проблему. Не хорошая практика. – EJP

Смежные вопросы