File
1.File类的概述
2.1 File类的静态成员变量
2.2 绝对路径与相对路径
2.3 File类的构造方法
构造方法(一)
构造方法(二)
构造方法(三)
2.4 File类获取功能的方法
(一)getAbsolutePath方法
(二)getPath方法
(三)getName方法
(四)length方法
2.5 File类判断功能的方法
(一)exists方法
(二)isDirectory与isFile方法
2.6 File类创建删除功能的方法
(一)createNewFile方法
(二)mkdir与mkdirs方法
ps(上图中File对象f4执行mkdirs方法时,不管你所写路径文件夹存不存在都会创建,返回值是true)
(三)delete方法
2.7 File类遍历目录(文件夹)的功能
(一)list方法
ps(该遍历能够将隐藏的文件或者文件夹也遍历出来)
(二)listFiles方法
3.1递归概念、分类及注意事项
3.2递归引发栈内存溢出原理图
3.3.1使用递归计算1-n之间的和代码实现(练习)
题目
代码
package learn.file.recurison;
/**
* @ClassName RecurisonDemo
* @Description TODO
* @Author Administrator
* @Date 2020/11/8 16:39
* @Version 1.0
**/
public class RecurisonDemo {
public static void main(String[] args) {
int sum = sum(100);
System.out.println(sum);
}
//定义一个方法,使用递归计算1-n之间的和
public static int sum(int n) {
//当n=1时,结束递归
if (n == 1) {
return 1;
}
return n + sum(n - 1);
}
}
打印结果截图
原理图分析
3.3.2使用递归计算阶乘(练习)
题目
代码
package learn.file.recurison;
/**
* @ClassName RecurisonDemo2
* @Description TODO
* @Author Administrator
* @Date 2020/11/8 16:49
* @Version 1.0
**/
public class RecurisonDemo2 {
public static void main(String[] args) {
//eg:假设计算的是5的阶乘
int result = jc(5);
System.out.println(result);
}
/**
* 定义一个方法使用递归计算阶乘,递归结束的条件是当获取到1时,递归的目的是获得下一次被乘的数
*
* @param n int类型的参数
* @return 返回使用递归计算阶乘的结果
*/
public static int jc(int n) {
if (n == 1)
return 1;
return n * jc(n - 1);
}
}
打印结果截图
3.3.3使用递归打印多级目录(练习)
题目
前提:事先在D:\java_data\IdeaProjects(商业版)\DataStructures\目录下创建有一个abc文件夹,abc文件夹下有a文件夹(该文件夹下又包含a.jpg文件,a.txt文件),b文件夹(该文件夹下又包含b.java文件,b.txt文件),abc.java文件,abc.txt文件
代码
package learn.file.recurison;
import java.io.File;
/**
* @ClassName RecurisonDemo3
* @Description TODO
* @Author Administrator
* @Date 2020/11/8 17:08
* @Version 1.0
**/
public class RecurisonDemo3 {
public static void main(String[] args) {
String filePath = "D:\\java_data\\IdeaProjects(商业版)\\DataStructures\\abc";
recurisonFiles(filePath);
}
/*
* 定义一个方法传递一个路径目录字符串来对目录进行遍历
*/
public static void recurisonFiles(String filePath) {
System.out.println(filePath);
File file = new File(filePath);
File[] files = file.listFiles();
for (File f : files) {
//对遍历得到的file1对象进行判断,判断是否为文件夹,是的话继续递归遍历
if (f.isDirectory()) {
recurisonFiles(f.getAbsolutePath());
} else {
System.out.println(f);
}
}
}
}
打印结果截图
3.3.4综合案例----文件搜索(练习)
题目:在3.3.3的基础上就行筛选,只要.java结尾的文件,同时将b文件夹下面的b.java改为b.JAVA,其他条件都没有改变。
代码
package learn.file.recurison;
import java.io.File;
/**
* @ClassName RecurisonDemo4
* @Description TODO
* @Author Administrator
* @Date 2020/11/8 17:39
* @Version 1.0
**/
public class RecurisonDemo4 {
public static void main(String[] args) {
String filePath = "D:\\java_data\\IdeaProjects(商业版)\\DataStructures\\abc";
recurisonFiles(filePath);
}
/*
* 定义一个方法传递一个路径目录字符串,对目录中的文件后缀名进行判断
* 只要.java结尾的文件
*/
public static void recurisonFiles(String filePath) {
File file = new File(filePath);
File[] files = file.listFiles();
for (File f : files) {
//对遍历得到的file1对象进行判断,判断是否为文件夹,是的话继续递归遍历
if (f.isDirectory()) {
recurisonFiles(f.getPath());
} else {
/*
分析:本题要求打印得到以.java为后缀的文件,String类中有一个endsWith方法可以获得
对象的后缀名,所以这里可以考虑把遍历得到的file文件对象转化为String对象
*/
//1.将file文件对象转化为String对象
String s = f.getPath();
//考虑到可能会出现大写字母后缀的情况,这里提前把s转化为小写
s = s.toLowerCase();
//2.调用String类的endsWith方法判断字符串是否以.java结尾
boolean b = s.endsWith(".java");
//3.若以.java结尾则输出
if (b) {
System.out.println(f);
}
}
}
}
}
打印结果截图
4. 1FileFilter过滤器的原理
4. 2FileFilter过滤器的使用(练习)
通过学习FileFilter过滤器对3.3.3使用递归打印多级目录练习进行优化
定义FileFilter接口的实现类
package learn.file.recurison.fileFilter;
import java.io.File;
import java.io.FileFilter;
/**
* @ClassName FileFilterImpl
* @Description TODO
* @Author Administrator
* @Date 2020/11/8 18:18
* @Version 1.0
**/
public class FileFilterImpl implements FileFilter {
@Override
public boolean accept(File pathname) {
/**
* 定义过滤规则
* 在accept方法中判断传入的文件的后缀名是否以.java结尾,是则返回true,否则返回false
*/
//如果pathname是个文件夹,则返回true继续进行遍历
if (pathname.isDirectory()) {
return true;
}
return pathname.getName().toLowerCase().endsWith(".java");
}
}
测试
package learn.file.recurison;
import learn.file.recurison.fileFilter.FileFilterImpl;
import java.io.File;
/**
* @ClassName RecurisonDemo5
* @Description TODO
* @Author Administrator
* @Date 2020/11/8 18:15
* @Version 1.0
**/
public class FileFilterDemo {
public static void main(String[] args) {
String filePath = "D:\\java_data\\IdeaProjects(商业版)\\DataStructures\\abc";
recurisonFiles(filePath);
}
/*
* 定义一个方法传递一个路径目录字符串来对目录进行遍历
*/
public static void recurisonFiles(String filePath) {
File file = new File(filePath);
File[] files = file.listFiles(new FileFilterImpl());//传递过滤器对象
for (File f : files) {
//对遍历得到的file1对象进行判断,判断是否为文件夹,是的话继续递归遍历
if (f.isDirectory()) {
recurisonFiles(f.getAbsolutePath());
} else {
System.out.println(f);
}
}
}
}
打印结果截图