当我想要运行它时出现此错误:
线程“main”中的异常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();
}
}
}
}
}
答案 0 :(得分:1)
x.listFiles();
将null
返回file
(不是directory
)
如果此抽象路径名不表示目录,或者发生I / O错误,则返回
null
。
所以在你的两个循环之前添加一个无效检查,如下所示
if(files!=null){
}
答案 1 :(得分: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文件是一个目录是安全的,但你可以在那里做同样的事情
答案 2 :(得分:1)
在致电file.isDirectory()
之前,请务必先检查file.listFiles()
。