Java File.list()与File.listFiles()的比较

Java File.list()与File.listFiles()的比较,java,swing,jtree,Java,Swing,Jtree,我的问题是:这两个函数是否有不同之处?我的意思是,我知道它们返回的是不同的东西,但是一个元素中的元素数是否可能与第二个元素中的元素数不同呢。我会尽力解释的。我为我的一个班级实现了TreeModel,试图在基于JTree的PC上更好地查看文件。这是它的一部分: public Object getChild(Object parent, int index) { File[] children = ((File) parent).listFiles(); if(chi

我的问题是:这两个函数是否有不同之处?我的意思是,我知道它们返回的是不同的东西,但是一个元素中的元素数是否可能与第二个元素中的元素数不同呢。我会尽力解释的。我为我的一个班级实现了TreeModel,试图在基于JTree的PC上更好地查看文件。这是它的一部分:

public Object getChild(Object parent, int index) {
        File[] children = ((File) parent).listFiles();
        if(children == null || index < 0 || index >= children.length) {
            return null;
        }

        File result = new MyFile(children[index]);
        return result;
}

public int getChildCount(Object parent) {
        //---
        //String[] children = ((File)parent).list();
        File[] children = ((File)parent).listFiles();
        //---

        if(children == null) {
            return 0;
        }
        return children.length;
}
public对象getChild(对象父对象,int索引){
File[]children=((文件)parent.listFiles();
if(children==null | | index<0 | | index>=children.length){
返回null;
}
文件结果=新的MyFile(子项[索引]);
返回结果;
}
public int getChildCount(对象父对象){
//---
//字符串[]子项=((文件)父项).list();
File[]children=((文件)parent.listFiles();
//---
if(children==null){
返回0;
}
返回子项长度;
}

我标记了有趣的代码。如果我将这两行更改为注释的一行,有时在加载TreeModel后会得到
NullPointerException
jtree.setModel(TreeModel)。此未注释不会引起任何问题。我检查了文档,它没有显示任何异常,包括通过两种方法返回null。这是怎么回事?

两种方法基本相同,请查看详细信息。

如前所述,但仅在D.R.发布的评论中澄清

  • list
    方法返回带有文件名(文件和 目录)

  • listFiles
    返回同一类文件的
    数组

见文件页,例如

String[]list()
返回一个字符串数组,该字符串命名此抽象路径名表示的目录中的文件和目录

File[]listFiles()
返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件


我不知道为什么这两种方法都存在,可能字符串数组比文件数组更快,占用的内存更少,所以问题是:这个模型是怎么回事?也许你只是幸运地使用了listFiles()?一种方法基于另一种方法,因此它们应该返回一致的数据。如果您有子项==null if,那么您究竟从何处获得NPE?也许父母是空的?为什么变量为空?相同。。。除了
listFiles()。从文件#listFiles获取NPE的唯一原因是,文件对象表示的路径不存在或不是目录