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