2017-04-24 33 views
0

///編輯///問題不是要求什麼空指針異常,在這種情況下可能會導致它。因爲這不是郵件鏈接的重複。Java遞歸目錄搜索拋出空指針異常

我試圖搜索整個系統的任何MP3或WAV文件。如果我將這種算法用於諸如用戶桌面這樣的小型樹,它可以正常工作,但是如果我使用更大的樹(例如用戶主目錄),則會引發空指針異常。任何人都知道我能如何解決這個問題?

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(); 
     } 
    } 
} 

這裏是例外,堆棧跟蹤

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) 

回答

0

這不是一個陣列的安全運行。 爲(文件I:數組){

和列表是您正試圖從一個文件得到的東西:查看工具提示

file.listFiles(): 

返回:抽象路徑名數組表示該抽象路徑名錶示的目錄中的文件和目錄。如果目錄爲空,該數組將爲空。如果此抽象路徑名不表示目錄或發生I/O錯誤,則返回null。


與List接口的工作是安全的,你可以將你的文件[]數組通過使用此列出:

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


+0

大那一定是它。非常感謝。 –

+0

不客氣。 – strash

+0

現在完美。再次感謝你的幫助。空目錄導致異常 –