1

我的目标是获取计算机中所有 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());

    }

}
}
4

2 回答 2

2

当它试图访问一些不真实的目录(如c:\Documents and Settings.

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
    }

}
于 2013-10-15T18:32:52.617 回答
0

在 Windows 操作系统中。C驱动器(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());
        }
    }
}
于 2013-10-15T18:27:20.907 回答