0

当我想运行它时出现此错误:

线程“主”java.lang.NullPointerException 中的异常

在这条线上

for (File y: childfiles){   )

但奇怪的是,这取决于我选择的方向是否有效

   import java.util.*;
    import java.io.*;
    import java.lang.System;

    public class mainclass {
        public static void main(String[] args) throws IOException, InterruptedException{

    String path = null; 
            Scanner scan = new Scanner(System.in);
            System.out.println("enter path:");
            path = scan.nextLine();

    File dir = new File(path);

    File[] files = dir.listFiles();


    for(File x : files){

        System.out.println(x);
        File[] childfiles = x.listFiles();
        for (File y: childfiles){


        if(y.toString().endsWith(".exe")){



           Process p = Runtime.getRuntime().exec(

                   y.toString());
                    p.waitFor();


                    System.out.println(y.toString()+" executed, press enter for next exe");
                    scan.nextLine();


        }
        }

    }




        }
    }
4

3 回答 3

1

x.listFiles();将返回null( filenot directory)

listFiles()

null如果此抽象路径名不表示目录,或者发生 I/O 错误,则返回。

所以在你的两个循环之前添加一个无效检查,如下所示

if(files!=null){

}
于 2012-08-07T18:56:24.740 回答
1

如果 x 不是目录,则 listFiles 返回 null 值。您应该更改代码以添加检查:

for(File x : files){

    System.out.println(x);
    if(! x.isDirectory() )
        continue;
    File[] childfiles = x.listFiles();
        //or add a null check
    if(childFiles != null)
        for (File y: childfiles){
            ...

我认为之前假设 dir 文件是一个目录是安全的,但你可以在那里做同样的事情

于 2012-08-07T18:58:31.067 回答
1

file.isDirectory()打电话前一定要检查file.listFiles()

于 2012-08-07T19:01:51.053 回答