14

我的问题是:如果这两个功能有什么不同?我的意思是我知道他们返回的东西不同,但是一个元素中的元素数量是否可能与第二个元素不同。我会尽力解释。我为我的一个班级实现了 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;
}

我标记了有趣的代码。如果我为这个评论的那一行更改了这两行,有时我会NullPointerException在加载 TreeModel: 后得到jtree.setModel(treeModel);。这个未注释不会造成任何麻烦。我检查了文档,它没有说任何异常,包括两种方法都返回 null 。这里发生了什么?

4

2 回答 2

9

这两种方法的作用基本相同,详情请查看http://www.docjar.com/html/api/java/io/File.java.html

于 2013-03-12T18:58:22.463 回答
2

正如已经指出的那样,但仅在DR发表的评论中澄清

  • list方法返回String array文件名(文件和目录)

  • listFilesarray of class File 相同的返回

请参阅文档页面,例如。https://docs.oracle.com/javase/7/docs/api/java/io/File.html

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

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

我不确定为什么这两种方法都存在,可能字符串数组会比文件数组一更快且内存消耗更少

于 2021-02-27T18:14:08.667 回答