一、File类
1.概念
File文件和目录的抽象表现形式
2.构造函数
3.常用方法
注意:
- creatNewFile:仅用于创建文件,而且文件所在根目录必须是存在的,不然会报错
- mkdir:创建指定的目录,但是待创建的目录前一层级目录结构必须是已经存在的,不然创建不成功,所以,建议使用mkdirs,创建全路径,不管存在不存在
4.特殊方法
- listFiles() 返回file封装路径下的所有子文件和文件夹的File对象 ,是全路径
- list() 返回file封装路径下的所有子文件和文件夹的String对象,仅有名称,非全路径
5.文件过滤器
- listFiles() 的重载形式,接受指定的过滤器
- 构造过滤器
class MyFileFilter implements FilenameFilter
{
@Override
public boolean accept(File dir, String name) {
System.out.println(dir); //打印的是文件或者文件夹所在的根目录路径
System.out.println(name); //打印的是文件的名字,仅仅是名字带后缀
return name.endsWith(".doc");//这里是筛选条件,返回true表示符合条件
}
}
class MyFilter implements FileFilter
{
@Override
public boolean accept(File pathname) {
System.out.println(pathname); //这里是带过滤文件的File的封装类,全路径
return pathname.toString().endsWith(".doc");//这里是筛选条件,返回true表示符合条件
}
}
- 使用过滤器
public static void func3()
{
File file = new File("D:\\Downloads\\BDYDownloads");
for (File str : file.listFiles(new MyFilter())) {
System.out.println(str);
}
}
二、递归
1.概念
指在当前方法中调用自己
2.练习
/*
* 1.递归打印所有子目录中的文件路径
*/
public static void OnPrintAllFiles(String path)
{
//1.创建File对象
File file = new File(path);
ArrayList<File> fileArray = new ArrayList<File>();
//2.得到file所有的子文件或者文件夹
File [] fls = file.listFiles();
for (int i = 0; i < fls.length; i++) {
//3.如果是文件夹,继续查找子文件
if(fls[i].isDirectory())
{
OnPrintAllFiles(fls[i].toString());
}
//4.如果是文件,放入fileArray
else
{
fileArray.add(fls[i]);
}
}
for (File file2 : fileArray) {
System.out.println(file2);
}
}
/*
* 2.打印指定目录即所有子目录中的.java文件的文件路径
*/
public static void OnPrintAllFilterFiles(String path) {
// 1.创建File对象
File file = new File(path);
ArrayList<File> fileArray = new ArrayList<File>();
// 2.得到file所有的子文件或者文件夹
File[] fls = file.listFiles();
for (int i = 0; i < fls.length; i++) {
// 3.如果是文件夹,继续查找子文件
if (fls[i].isDirectory()) {
OnPrintAllFilterFiles(fls[i].toString());
}
// 4.如果是文件,判断是否是.java结尾,如果是,放入fileArray
else {
if(fls[i].toString().endsWith(".java"))
fileArray.add(fls[i]);
}
}
for (File file2 : fileArray) {
System.out.println(file2);
}
}
3.注意事项
- 要有出口,否则就是死递归
- 递归的次数不能太多,不然会内存溢出
全文完!