2013-10-15 56 views
1

我的目標是獲得我的電腦中所有mp3文件的清單(c:目錄下面的代碼)。但是當我運行這個代碼時,我得到了NullPointerException。但適用於其他目錄,如(e :)。如何在Java中讀取我電腦中的所有mp3文件?

public class music { 

public static void main(String args[]){ 
    extract("c:\\"); 

} 
public static void extract(String p){ 
    File f=new File(p); 
    File l[]=f.listFiles(); 

    for(File x:l) 
    { 
     //System.out.println(x.getName()); 

     if(x.isHidden()||!x.canRead()) 
      continue; 
     if(x.isDirectory()) 
      extract(x.getPath()); 
     else if(x.getName().endsWith(".mp3")) 
      System.out.println(x.getPath()+"\\"+x.getName()); 

    } 

} 
} 
+0

我興趣看看'DirectoryStream '? –

+1

哪一行是異常來自? – Kayaman

+0

http://docs.oracle.com/javase/6/docs/api/java/io/File.html#listRoots()至少從listRoots開始,而不是c:\\ – 2013-10-15 17:59:50

回答

0

在Windows操作系統中。 C驅動器(Windows驅動器)具有運行時由Windows使用的系統文件和一些由窗口鎖定的文件。當你的代碼試圖通過例外訪問那些文件。
嘗試與其他則C運行這段代碼://程。 加試捕或空檢查此文件:

import java.io.*; 
public class Music { 
    public static void main(String args[]){ 
     extract("c:\\"); 
    } 
    public static void extract(String p){ 
     File f=new File(p); 
     File l[]=f.listFiles(); 
     for(File x:l){ 
      if(x==null) return; 
      if(x.isHidden()||!x.canRead()) continue; 
      if(x.isDirectory()) extract(x.getPath()); 
      else if(x.getName().endsWith(".mp3")) 
       System.out.println(x.getPath()+"\\"+x.getName()); 
     } 
    } 
} 
+0

謝謝!它的工作原理:) – Spartan

+0

如果它真的幫助你投票了.. – gifpif

+0

@Spartan你解決它通過測試'x' null或'l'? – Pshemo

1

我NPE與您的代碼,當它試圖訪問某些not real directories like c:\Documents and Settings

爲了解決這個問題,你可以跳過循環訪問,在該代碼返回從listFiles()null像目錄:

public static void main(String args[]) { 
    extract(new File("c:\\")); 

} 

public static void extract(File dir) { 
    File l[] = dir.listFiles(); 

    if (l == null) { 
     System.out.println("[skipped] " + dir); 
     return; 
    } 

    for (File x : l) { 
     if (x.isDirectory()) 
      extract(x); 
     if (x.isHidden() || !x.canRead()) 
      continue; 
     else if (x.getName().endsWith(".mp3")) 
      System.out.println(x.getPath());//name should be included in path 
    } 

} 
相關問題