还是没有搞明白这两个方法的区别。
他们都可以显示当前目录下的所有文件和目录,
为什么递归之后,list仍然显示当前,没有递归下去。而listFiles却显示出来了?
详解list 和listFlile:
首先调用list()方法的话,返回的是一个String类型的字符串数组,它返回的是dir目录下一级的所有文件的目录,但它是以字符串的形式存在,然而java并不会识别该字符串类型的目录,因为java不确定该string是否是一个文件目录,或者还是只是一个数字或者其他类型的对象,只能简单的将它显示出来
然后调用listFile()方法的话,返回的是一个文件类型的文件数组,返回的也是dir目录下一级的所有文件的目录,但与string类型不同的是,java可以自动识别文件类型的对象,知道返回的是一个File类型的对象,所以可以调用相应的方法进行递归遍历,而String 类型可能是因为系统没有配备相应的方法,所以不能做判断是否是目录,并且进行递归遍历的操作
首先调用list()方法的话,返回的是一个String类型的字符串数组,它返回的是dir目录下一级的所有文件的目录,但它是以字符串的形式存在,然而java并不会识别该字符串类型的目录,只能简单的将它显示出来
然后调用listFile()方法的话,返回的是一个文件类型的文件数组,返回的也是dir目录下一级的所有文件的目录,但与string类型不同的是,java可以自动识别文件类型的对象,知道返回的是一个File类型的对象,所以可以调用相应的方法进行递归遍历,而String 类型可能是因为系统没有配备相应的方法,所以不能做判断是否是目录,并且进行递归遍历的操作
对的,就是针对这个问题,我利用将返回的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);
// }
// }
尝试做出解答:
首先,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类型的方法,所以无法递归。