Logo

郎哥编程

遍历目录和文件

2019-12-29 198

File类提供了list和listFiles方法用于获取指定目录下的文件和目录。

●   File[]  listFiles ()

该方法用于返回某个目录下所有文件和目录的File对象,返回的是File对象数组。

●   String[]  list ()

该方法用于返回某个目录下的所有文件和目录的文件名,返回的是String数组。

案例1:应用递归方法遍历指定目录下的所有子目录和文件。

在file包下新建TraverseFile类。代码如下:

package file;
 
import java.io.File;
 
/**
 * @ClassName: TraverseFile
 * @Description: 输入与输出(遍历目录和文件)案例1
 * @author 编程训练营
 * @date
 *
 */
 
public class TraverseFile {
 
    public static void listFiles(File dir) {
       // 判断当前文件或目录是否存在
       if (dir.exists()) {
           // 如果是目录
           if (dir.isDirectory()) {
              // 打印当前目录的路径
              System.out.println(dir);
              // 获取该目录下的所有文件和目录组成的File数组
              File[] files = dir.listFiles();
              // 递归遍历每一个子文件
              for (File file : files) {
                  listFiles(file);
              }
           }
           // 如果是文件,则打印该文件路径及名称
           else {
              System.out.println(dir);
           }
       }
    }
}

TraverseFile类用到了递归算法,递归算法就是在方法内部再次调用自身方法,就形成了递归调用。例如TraverseFile类的listFiles()方法就是递归算法,在listFiles()方法内部又调用了listFiles()方法。使用递归算法可以简化和替代循环。

在file包下新建TraverseFileTest类,测试TraverseFile类。代码如下:

package file;
 
import java.io.File;
 
/** 
* @ClassName: TraverseFileTest 
* @Description: 输入与输出(遍历目录和文件)案例2 
* @author 编程训练营 
* @date 
* 
*/
 
public class TraverseFileTest {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       // 遍历指定的目录
       File  file = new File("c:\\test2");
       TraverseFile.listFiles(file);
    }
 
}

TraverseFile类的listFiles()方法是静态方法,因此无需实例化TraverseFile对象就可以调用。listFiles()方法要求传入File对象,因此需要实例化File对象,并指定要遍历的目录。

程序执行结果如下图所示:

image.png

从输出结果可以看出,test2目录下有子文件夹print和三个图片文件。在print文件夹下有data目录,没有文件。在data目录下有src目录,也没有文件。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论