1

これは私がうまくいくと思うものの概念ですが、何らかの理由でこのコードを実行するたびに、次NullPointerExceptionのコードを取得します。

for(String s : namesOfDirectoryFiles){

コード

public class poc {
    private File current;
    private File last;
    private String[] namesOfDirectoryFiles;
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args){
        poc p = new poc();
        p.open("C:/");
        p.open(input.nextLine());
    }

    private void open(String name){
        current = new File(last, name);
        namesOfDirectoryFiles = current.list();
        for(String s : namesOfDirectoryFiles){
            System.out.println(s);
        }
    }
}
4

2 に答える 2

1

これは、抽象パスが存在しない場合に発生します。

基本的に、Javaが物理的な場所に解決できないディレクトリをリストしようとすると、nullリストが返されます。

JavaDocsから

この抽象パス名がディレクトリを示していない場合、またはI / Oエラーが発生した場合は、nullを返します。

于 2012-09-04T03:10:22.950 に答える
1

isDirectory()ロジックを進める前に、メソッドを使用してファイルが実際にディレクトリであるかどうかを確認することをお勧めします。Javadocによると、このメソッドは

この抽象パス名で示されるファイルが存在し、ディレクトリである場合にのみtrue。それ以外の場合はfalse

コードを次のように変更できます。

private void open(String name){
    if(name != null){
        current = new File(last, name);

        if(current.isDirectory()){
            namesOfDirectoryFiles = current.list();
            for(String s : namesOfDirectoryFiles){
             System.out.println(s);
            }
        }   
    }
}
于 2012-09-04T03:12:18.307 に答える