2017-04-24 1 views
0

/// EDIT /// La question ne pose pas ce qu'est une exception de pointeur nul, simplement ce qui pourrait l'avoir provoqué dans cette instance. Comme tel n'est pas un doublon de la poste liée. Je cherche à rechercher dans tout le système des fichiers mp3 ou wav. Si j'utilise l'algorithme pour un petit arbre tel que le bureau des utilisateurs, cela fonctionne très bien, mais si j'utilise un arbre plus grand tel que le répertoire personnel des utilisateurs, il envoie une exception de pointeur nul. Quelqu'un sait comment je peux contourner cela?La recherche d'annuaire récursive Java lève une exception de pointeur nul

package audioTest; 

import java.io.File; 


public class Main { 


    public static void recListFile(File[] list){ 
     for(File i : list){ 
      if(i.isDirectory()){ 
       recListFile(i.listFiles()); 
      } 
      else{ 
       String filePath = i.toString(); 
       StringfileExt=filePath.substring(filePath.lastIndexOf(".")+1); 
       if(fileExt.equals("wav") || fileExt.equals("mp3")){ 
        System.out.println(i.getName()); 
       } 
      } 
     } 
    }//end recListFile 


    public static void main(String[] args){ 

     File dir = new File(System.getProperty("user.home")); 
     try { 
      recListFile(dir.listFiles()); 
     } catch(NullPointerException n) { 
      // more general: catch(Error n) 
      // anything: catch(Throwable n) 
      System.out.println("Caught "+n); 
      n.printStackTrace(); 
     } 
    } 
} 

Voici la trace d'exception et de la pile

Exception in thread "main" java.lang.NullPointerException 
    at audioTest.Main.recListFile(Main.java:11) 
    at audioTest.Main.recListFile(Main.java:13) 
    at audioTest.Main.recListFile(Main.java:13) 
    at audioTest.Main.recListFile(Main.java:13) 
    at audioTest.Main.main(Main.java:30) 

Répondre

0

Ce n'est pas une opération sans danger pour un tableau. pour (fichier i: array) {

et la liste est quelque chose que vous essayez d'obtenir à partir d'un fichier: Voir l'info-bulle

file.listFiles(): 

retourne un tableau de noms de fichiers abstraits dénotant les fichiers et répertoires dans le répertoire dénotés par ce chemin d'accès abstrait. Le tableau sera vide si le répertoire est vide. Renvoie null si ce chemin d'accès abstrait ne dénote pas un répertoire ou si une erreur d'E/S se produit.


Travailler avec la liste interface est plus sûr et vous pouvez convertir votre tableau de fichier [] à la liste en utilisant ceci:

List<File> fileList = Arrays.asList($yourArrayHere$); 


+0

Grande qui doit l'être. Merci beaucoup. –

+0

vous êtes les bienvenus. – strash

+0

fonctionne parfaitement maintenant. Merci encore pour votre aide. Répertoire vide causait l'exception –