利用递归思想对一个目录下的所有文件进行遍历

1.文件(File)

在java.io.File中,是一个公共的,实现了Serializable、Comparable接口。用于描述文件和目录的类,对文件进行查找,判断,删除等的操作

属性:这是跟操作系统有关,也就是分隔符,本例一windows为例

        separator:"/"或者“\\”

        separatorChar:"/"或者“\\”

        pathSeparator:";"

       pathSeparatorChar:";"

常用的方法有:

访问文件:

  • getName():返回文件名称

  •  getPath():返回文件的相对路径

  •   getAbsoluteFile():返回在绝对路径下的文件

  •   getAbsolutePath():返回该文件的绝对的路径

  •    getParent():获取父目录

  •   renameTo(File newName):重命名

检测文件的功能或存在
  •           exists():是否存在
  •           canWrite():是否可写
  •           canRead():是否可读
  •           isFile():是否文件
  •           isDirectory():是否是目录
返回文件一些特殊信息
  •           lastModified():返回最后修改的时间,从1970年1月1日0点的long型
  •           length():文件或目录的大小(字节数)注意:目录没有大小,里面里所有的文件的大小之和文件操作相关
  •           createNewFile():创建新的文件
  •           delete():删除文件

目录操作相关

  •           mkDir():创建终点目录

  •           mkDirs():创建中间和终点目录

  •           list():返回在目录下所有的文件名字

  •           listFiles():返回 目录文件的对象,对象包括路径,文件名,大小等

还有一些可以用到函数式接口或者lambda表达式的方法

String[]    list(FilenameFilter filter)   返回一个字符串数组的满足指定过滤器命名文件和目录。

File[]      listFiles(FileFilter filter)   返回一个文件数组的满足指定过滤器命名文件和目录。

File[]               listFiles(FilenameFilter filter)   返回一个文件数组的满足指定过滤器命名文件和目录。

2.递归算法

递归在循环里面经常出现,小至有规律的数值求和,大到对象或类。

递归可分为直接递归和间接递归

直接递归:函数在执行过程中调用本身

间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。

注意:用递归一定要注意终止条件。

3.用递归的方法遍历整个目录下的所有文件

package com.sbdqn.file;
import java.io.File;
public class ForEachFile {
public static void main(String[] args) {
ForEachFile foreach = new ForEachFile();
File fil = new File("D:/es");
// 在递归方法里面用增强for循环,系统会默认生成一个条件,即小于数组的长度
foreach.foreach(fil);
} public void forEach(File fil) {
// 创建递归方法及引入参数
File file = new File(fil.getPath());
File[] files = file.listFiles();
// 遍历这个目录下的所有文件和目录
for (File file2 : files) {
// 判断目录是否存在
if (file2.exists()) {
if (file2.isDirectory()) {
// 如果不是文件,递归调用该目录下的所有文件和目录
foreach(file2);
} else {
System.out.println(file2.getPath());
}
} else {
System.out.println("你所输入的路径不存在");
break;
}
}
}
} 下面这是利用lambda表达式进行操作public void forEachByLambda(File fil) {
// 创建递归方法及引入参数
File file = new File(fil.getPath());
// 用Lambda表达式进行筛选,筛出文件
File[] files = file.listFiles(a -> {
if (a.isFile()) {
return true;
}
return false;
});
for (File file2 : files) {
System.out.println(file2.getPath());
}
// 用lambda表达式进行筛选,筛出目录
File[] file1 = file.listFiles(b -> {
if (b.isDirectory()) {
return true;
}
return false;
});
for (File file2 : file1) {
// 递归方法
forEachByLambda(file2);
} }

转载于:https://www.cnblogs.com/ljw-cnqh/p/6757527.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值