为了账号安全,请及时绑定邮箱和手机立即绑定

关于list和listFiles的区别

还是没有搞明白这两个方法的区别。

他们都可以显示当前目录下的所有文件和目录,

为什么递归之后,list仍然显示当前,没有递归下去。而listFiles却显示出来了?

正在回答

4 回答

详解list 和listFlile:

首先调用list()方法的话,返回的是一个String类型的字符串数组,它返回的是dir目录下一级的所有文件的目录,但它是以字符串的形式存在,然而java并不会识别该字符串类型的目录,因为java不确定该string是否是一个文件目录,或者还是只是一个数字或者其他类型的对象,只能简单的将它显示出来

然后调用listFile()方法的话,返回的是一个文件类型的文件数组,返回的也是dir目录下一级的所有文件的目录,但与string类型不同的是,java可以自动识别文件类型的对象,知道返回的是一个File类型的对象,所以可以调用相应的方法进行递归遍历,而String 类型可能是因为系统没有配备相应的方法,所以不能做判断是否是目录,并且进行递归遍历的操作


0 回复 有任何疑惑可以回复我~

首先调用list()方法的话,返回的是一个String类型的字符串数组,它返回的是dir目录下一级的所有文件的目录,但它是以字符串的形式存在,然而java并不会识别该字符串类型的目录,只能简单的将它显示出来

然后调用listFile()方法的话,返回的是一个文件类型的文件数组,返回的也是dir目录下一级的所有文件的目录,但与string类型不同的是,java可以自动识别文件类型的对象,知道返回的是一个File类型的对象,所以可以调用相应的方法进行递归遍历,而String 类型可能是因为系统没有配备相应的方法,所以不能做判断是否是目录,并且进行递归遍历的操作

0 回复 有任何疑惑可以回复我~

对的,就是针对这个问题,我利用将返回的String数组分别创建File对象,然后就可以递归调用了。。但不知道是不是因为两个方法的区别,导致没有到达递归的效果。

String[] file = dir.list();

// for(String temp : file){

// File tempFile = new File(temp);

// System.out.println(dir + "\\" + tempFile);

// System.out.println(tempFile.isDirectory());

// if(tempFile.isDirectory()){

// listDirectory(tempFile);

// System.out.println(dir + "\\" + tempFile);

// System.out.println(dir + "是个目录");

// }else{

// //System.out.println(dir + "\\" + temp);

// }

// }


0 回复 有任何疑惑可以回复我~

尝试做出解答:

首先,list返回的的是String类型的值,仅仅只是当前目录下的所有文件和目录的名称(假设其中有个xx.txt,返回的只是“xx”,前面没有“e://a//b”这样),要分清,这是个字符串String

listFiles返回的是File的对象(类似于你这样创建的:File file = new File(“E:\\a”);),这个是File类型

最后,要用递归的话,public static void listDirectory (File dir) throws IOException {...},这个函数的参数是File类型的,所以想要进行递归就得正确地传入参数,如果你传入了String类型,自然没有函数里的属于File类型的方法,所以无法递归。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于list和listFiles的区别

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信