Java递归目录搜索会抛出空指针异常

时间:2017-04-24 19:01:39

标签: java windows file directory

///编辑///问题不是什么空指针异常,仅仅是在这个实例中可能引起什么。因为这不是帖子链接的重复。

我试图在整个系统中搜索任何mp3或wav文件。如果我将算法用于小树,例如用户桌面,它可以正常工作,但是如果我选择较大的树,例如用户主目录,则会抛出空指针异常。有谁知道我怎么能绕过这个?

package audioTest;

import java.io.File;


public class Main {


    public static void recListFile(File[] list){
        for(File i : list ){
            if(i.isDirectory()){
                recListFile(i.listFiles());
            }
            else{
                String filePath = i.toString();
                StringfileExt=filePath.substring(filePath.lastIndexOf(".")+1);
                if(fileExt.equals("wav") || fileExt.equals("mp3")){
                    System.out.println(i.getName());
                }
            }
        }
    }//end recListFile


    public static void main(String[] args){

        File dir = new File(System.getProperty("user.home"));
        try {
            recListFile(dir.listFiles());
        } catch(NullPointerException n) {
            // more general: catch(Error n)
            // anything: catch(Throwable n)
            System.out.println("Caught "+n);
            n.printStackTrace();
        }
    }
}

这是异常和堆栈跟踪

Exception in thread "main" java.lang.NullPointerException
    at audioTest.Main.recListFile(Main.java:11)
    at audioTest.Main.recListFile(Main.java:13)
    at audioTest.Main.recListFile(Main.java:13)
    at audioTest.Main.recListFile(Main.java:13)
    at audioTest.Main.main(Main.java:30)

1 个答案:

答案 0 :(得分:0)

这对阵列来说不是安全的操作。     for(File i:array){

并且列表是您尝试从文件中获取的内容:请参阅工具提示

file.listFiles():

返回:一个抽象路径名数组,表示此抽象路径名表示的目录中的文件和目录。如果目录为空,则数组将为空。如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。

使用List接口更安全,您可以使用以下方法将File []数组转换为列表:

List<File> fileList = Arrays.asList($yourArrayHere$);