【问题标题】:Java Recursive Directory Search throws Null Pointer Exception [duplicate]Java递归目录搜索引发空指针异常[重复]
【发布时间】:2017-09-21 14:13:02
【问题描述】:

///EDIT/// 问题不是问空指针异常是什么,只是在这种情况下可能导致它的原因。因此不是链接的帖子的副本。

我正在尝试在整个系统中搜索任何 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)

【问题讨论】:

    标签: java windows file directory


    【解决方案1】:

    这对数组来说不是一个安全的操作。 for(文件 i : 数组){

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

    file.listFiles():
    

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


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

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


    【讨论】:

    • 太好了,一定是这样。非常感谢。
    • 不客气。
    • 现在完美运行。再次感谢你的帮助。空目录导致异常
    • 太好了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多