public class traverse {
public static void tra(File path){
if(path == null){
return;
}
if(path.isDirectory()){
String[] files = path.list();
for(int i = 0; i < files.length;i++){
tra(new File(path,files[i]));
}
}else{
if(path.getAbsolutePath().endsWith(".exe"))
System.out.println(path);
}
}
public static void main(String[] args) {
try{
File file = new File("D:\\");
tra(file);
}catch(Exception e){
e.printStackTrace();
}
}}老是抛出异常
java.lang.NullPointerException;
请问这是为什么啊

解决方案 »

  1.   

    有些隐藏的系统文件夹无法访问,String[] files = path.list()返回null
      

  2.   

    加个判断,如果files为空,就return吧。
      

  3.   

    public static void getFileName(File file) {if (file.isDirectory()) {
    File[] files = file.listFiles();
    for (File file2 : files) {getFileName(file2);}
    }
    if (file.isFile()) {
    System.out.println(file.getName());
    return;
    }}
      

  4.   


    你的递归逻辑有问题。
    在里面加个判空,然后再修改逻辑。
    if(files != null && files.length > 0))
     否则,
    String[] files = path.list();
                for(int i = 0; i < files.length;i++){
                    tra(new File(path,files[i]));
                }当files = null时候,
    下面循环必然报空指针。