我的问题是:如果这两个功能有什么不同?我的意思是我知道他们会返回不同的东西,但是在一个元素中的元素数量可能与第二个元素中的元素数量不同。我会尽力解释。我为我的一个类实现了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;
}
我标记了有趣的代码。如果我为这个评论的更改了这两行,有时我会在加载TreeModel后获得NullPointerException
:jtree.setModel(treeModel);
。这没有注释不会造成任何麻烦。我检查了文档,它说没有什么不寻常的,包括通过两种方法返回null。这是怎么回事?
答案 0 :(得分:7)
两种方法基本相同,请查看http://www.docjar.com/html/api/java/io/File.java.html了解详细信息。
答案 1 :(得分:1)
正如已经指出的那样,但仅在 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()
返回一组抽象路径名,表示此抽象路径名所表示的目录中的文件。
我不确定为什么这两种方法都存在,可能字符串数组比文件数组一更快,内存消耗更少