第一章 File 类
1.1 概述
java.io.File 类是文件和路径的抽象表示,主要用于文件和路径的创建、查找和删除等等操作。
1.2 构造方法
• public File(String pathname):通过给定的路径名字符串转换为抽象路径名来创建新的 File 实例
• public File(File parent, String child):把父路径字符串和子路径的字符串组合后创建新的File 实例
• public File(String parent, String child):把父路径字符串和子路径的字符串组合后创建
案例:
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:/");
//
File file01 = new File("D:/", "a.txt");
File file02 = new File(file, "b.txt");
}
}
1.3 常用方法
获取方法
• public String getAbsolutePath():获取绝对路径
• public String getPath():将此File对象转换为路径名字符串
• public String getName():返回此File所表示的文件或目录的名称
• public long length():返回此 File 表示的文件的长度
public class Demo01 {
public static void main(String[] args) {
//再File这里的相对路径,是从项目根目录开始。
//也就说,相对于项目根目录
File file = new File("out\\production\\studySe\\day21\\a.txt");
// File file = new File("xxx/xxx/xx.png");
String aPath = file.getAbsolutePath();
// aPath = file.getPath();
String name = file.getName();
long length = file.length();
System.out.println(length);
}
}
注意:在创建 File 对象时,使用的相对路径,是相对于项目根目录的。
判断方法
• public boolean exists():此 File 表示的文件或目录是否实际存在
• public boolean isDirectory():表示此File对象是否为一个目录
• public boolean isFile():此File 对象是否为文件
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:\\Projects\\IdeaProjects");
System.out.println(file.isDirectory()); //true
System.out.println(file.isFile()); //false
System.out.println(file.exists()); //true
}
}
创建删除方法
• public boolean createNewFile():当且仅当具有该名称的文件不存在时,创建一个新的空文件。
• public boolean delete():删除此 File 对象表示的文件或目录
• public boolean mkdir():创建此 File 表示的目录
• public boolean mkdirs():创建此File 表示的目录,包括任何必须单不存在的父目录。
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:/a/b");
if (!file.exists()) {
file.mkdirs();
}
// file.delete();
}
}
目录的遍历
• public String[] list():返回一个字符串数组,表示该 File 目录中的所有子文件或目录
• public File[] listFiles():返回一个 File 数组,表示该 File 目录中的所有子文件或目录
• String [ ] str = file.list(); 和 File [ ] str = file.list(); 的区别是String 直接获取文件名字 而 file 还获取到了全路径
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:\\Projects\\IdeaProjects");
// String[] list = file.list();
// for (String str : list) {
// System.out.println(str);
// }
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f);
}
}
}
第二章 递归
2.1 概述
递归:指在当前方法内调用自己的这种现象。
递归的分类:
• 直接递归,成为方法自己的调用
• 间接递归,可以 A 方法调用 B 方法, B 方法调用 C 方法, C 方法在调用 A 方法。
注意事项:
• 递归一定要由条件限定,保证递归能停止下来,否则会发生栈内存溢出。
• 在递归中虽然由限定条件,但递归次数也不能太多,否则也会发生内存溢出。
• 构造方法,禁止递归。
2.2 递归累加求和
计算 1~ n 的和
public class Demo01 {
public static void main(String[] args) {
//5
System.out.println(getSum(5));
}
public static int getSum(int i) {
if (i == 1) {
return 1;
}
return i + getSum(i - 1);
}
}
2.3 递归求阶乘
public class Demo01 {
public static void main(String[] args) {
//5
System.out.println(getSum(5));
}
public static int getSum(int i) {
if (i == 1) {
return 1;
}
return i * getSum(i - 1);
}
}
2.4 递归打印多级目录
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:\\Projects\\IdeaProjects\\studySe\\src");
printFile(file);
}
//递归打印某个目录下的所有文件或文件夹
public static void printFile(File file) {
if (file.isFile()) {
System.out.println(file.getName());
} else if (file.isDirectory()) {
System.out.println(file.getName());
File[] files = file.listFiles();
for (File f: files) {
printFile(f);
}
}
}
}
第三章 综合案例
3.1 文件搜索
搜索某个目录下所有的.java文件
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:\\Projects\\IdeaProjects\\studySe\\src");
printFile(file);
}
//递归打印某个目录下的所有文件或文件夹
public static void printFile(File file) {
if (file.isFile()) {
if (file.getName().endsWith(".java")) {
System.out.println(file.getName());
}
} else if (file.isDirectory()) {
// System.out.println(file.getName());
File[] files = file.listFiles();
for (File f : files) {
printFile(f);
}
}
}
}
3.2 文件过滤器优化
java.io.FileFilter 是一个接口,它是 File 的过滤器。该接口的对象可以传递给 File 类的 listFiles(FileFilter) 作为参数,接口中只有一个方法:
boolean accept(File pathname):测试 pathname 是否应该包含在当前File 目录中,符合条件则返回true
改写程序
public class Demo01 {
public static void main(String[] args) {
File file = new File("D:\\Projects\\IdeaProjects\\studySe\\src");
printFile(file);
}
//递归打印某个目录下的所有文件或文件夹
public static void printFile(File file) {
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//过滤条件
return pathname.getName().endsWith(".java") || pathname.isDirectory();
}
});
for (File f :
files) {
if (f.isFile()) {
System.out.println(f.getName());
} else if (f.isDirectory()) {
printFile(f);
}
}
}
}