总结
我是最棒的!基础不牢,地动山摇!
File类
三个常用的构造方法
/*
File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。
*/
常用方法参见API
API File类
五个重要的方法
/*
* 重要方法:
* 1.String[] list()获取当前文件夹下所有的子文件夹或者子文件的名
2.File[] listFiles() 获取当前文件夹下所有的子文件夹或者子文件对象
3.String[] list(FilenameFilter filter)
获取根据文件名过滤后的文件名
FilenameFilter:文件名过滤器
4.File[] listFiles(FileFilter filter)
获取根据文件过滤后的文件对象
FileFilter:
5.File[] listFiles(FilenameFilter filter)
获取根据文件名过滤后的文件对象
FilenameFilter:
*/
使用匿名内部类的方式使用后面三种方法
package cn.itsource.file;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.Arrays;
public class FileTest2 {
public static void main(String[] args) {
/*
* 重要方法:
* 1.String[] list()获取当前文件夹下所有的子文件夹或者子文件的名
2.File[] listFiles() 获取当前文件夹下所有的子文件夹或者子文件对象
3.String[] list(FilenameFilter filter)
获取根据文件名过滤后的文件名
FilenameFilter:文件名过滤器
4.File[] listFiles(FileFilter filter)
获取根据文件过滤后的文件对象
FileFilter:
5.File[] listFiles(FilenameFilter filter)
获取根据文件名过滤后的文件对象
FilenameFilter:
*/
File file = new File("F:/test");
String[] list = file.list();
System.out.println(Arrays.toString(list));
File[] files = file.listFiles();
System.out.println(Arrays.toString(files));
String[] list2 = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if(name.endsWith(".txt")){
return true;
}
return false;
}
});
System.out.println(Arrays.toString(list2));
File[] list3 = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//pathname是File对象的名字
if(pathname.getName().endsWith(".txt")){
return true;
}
return false;
}
});
System.out.println(Arrays.toString(list3));
/*5.File[] listFiles(FilenameFilter filter)
获取根据文件名过滤后的文件对象
FilenameFilter:*/
File[] list4 = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//dir是File对象,name是文件名
if(name.endsWith(".txt")){
return true;
}
return false;
}
});
System.out.println(Arrays.toString(list4));
}
}
递归
递归实质是自己调用自己,前提是必须要有出口(终止条件),适合数据量比较少,递归的层级比较少。能用for循环就不要用递归,因为递归非常占用栈资源
使用场景
-
树状结构遍历,比如菜单
-
有相似或者相同的业务场景
递归的核心
- 数值带入,查看规律
- 查看相同业务的代码,在此处用条件判断的方式,调用自己的方法
递归查找一个文件夹下指定后缀的所有文件
package cn.itsource.file;
import java.io.File;
public class RecursionTest {
public static void main(String[] args) {
File file = new File("F:/test");
printFiles(file, ".txt");
}
/**
* 打印file目录下的所有后缀为suffix的文件
* @param file
* @param suffix
*/
public static void printFiles(File file,String suffix){
if(file == null || !file.exists()){
return;
}
File[] files = file.listFiles();
if(files != null){
for (File f : files) {
if(f.isFile() && f.getName().endsWith(suffix)){
System.out.println(f.getName());
}else if(f.isDirectory()){
printFiles(f, suffix);
}
}
}
}
}