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にアクセスしようとしたときに、コードで 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
    }

}
于 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 に答える