问答详情
源自:2-2 遍历目录

关于list和listFiles的区别

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

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

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

提问者:helloworld2008 2016-07-17 18:29

个回答

  • 慕哥1890516
    2016-09-29 19:12:07

    详解list 和listFlile:

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

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


  • 慕哥1890516
    2016-09-29 19:08:59

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

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

  • helloworld2008
    2016-07-17 21:16:33

    对的,就是针对这个问题,我利用将返回的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);

    // }

    // }


  • DeFeNG
    2016-07-17 19:42:25

    尝试做出解答:

    首先,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类型的方法,所以无法递归。