如何在java中读取我的计算机中的所有mp3文件?

时间:2013-10-15 17:57:18

标签: java exception file-io nullpointerexception mp3

我的目标是获取计算机中所有mp3文件的列表(在c:目录中的代码下面)。但是当我运行此代码时,我得到了NullPointerException。但适用于其他目录,如(e :)。

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

    }

}
}

2 个答案:

答案 0 :(得分:2)

当我尝试访问某些not real directories like c:\Documents and Settings时,我的代码获得了NPE。

要解决此问题,您可以跳过迭代从null返回listFiles()的目录,如下所示:

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
    }

}

答案 1 :(得分:0)

在Windows操作系统中。 C Drive(Windows驱动器)具有Windows运行时使用的系统文件和Windows锁定的文件。当您的代码尝试通过异常访问该文件时 尝试使用其他C://驱动器运行此代码.. 为此文件添加Try catch或null检查:

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