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

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);
} }

posted @ 2017-04-24 16:27  知识的搬运码农  阅读(247)  评论(0编辑  收藏  举报