File.list() vs File.listFiles()

2022-09-04 03:44:54

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

我标记了有趣的代码。如果我为这个注释的一行更改了这两行,有时我会在加载树模型后得到:.此未注释不会造成任何麻烦。我检查了文档,它说没有什么不寻常的,包括通过两种方法返回null。这是怎么回事?NullPointerExceptionjtree.setModel(treeModel);


答案 1

这两种方法基本上都是一样的,请查看 http://www.docjar.com/html/api/java/io/File.java.html 了解详细信息。


答案 2

如前所述,但仅在D.R的帖子中的评论中进行了澄清

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

  • listFiles返回相同array of class File

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

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

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

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


推荐