01.第一章:File类_概述:
1).java.io.File(类):File类可以操作磁盘上的文件、目录。
1).可以创建、删除文件/目录。
2).可以获取文件/目录的一些属性信息;最后修改时间、是否可读、可写..
2).File类不能对“文件内容”进行读写(后期使用IO流)。
02.第一章:File类_File类的构造方法:
1).File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
2).File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
3).File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
示例代码:
public static void main(String[] args) {
// 1).File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File f1 = new File("d:\\demo03.txt");//绝对路径:带盘符,从盘符开始找;
File f2 = new File("demo02.txt");//相对路径:不带盘符,从项目根目录下开始找;
File f3 = new File("ajfkdsljfkdsljfklsjf");//文件/目录不存在
File f4 = new File("d:\\aaa2");//构造在目录上
// 2).File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
File f5 = new File("d:\\", "demo03.txt");//相当于:f1
// 3).File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File f6 = new File("d:\\");
File f7 = new File(f6, "demo03.txt");//相当于f1和f5
System.out.println("程序结束!");
}
03.第一章:File类_绝对路径和相对路径:
对于“磁盘目录”:
1).绝对路径:带盘符的。
2).相对路径:不带盘符的,从项目根目录开始。
04.第一章:File类File类的常用方法获取的方法:
1).public String getAbsolutePath() : 返回此File的绝对路径名字符串。
2).public String getPath() : 将此File转换为路径名字符串。
3).public String getName() : 返回由此File表示的文件或目 录的名称。
4).public long length() : 返回由此File表示的文件的长度。不能操作目录;
示例代码:
public static void main(String[] args) {
File f1 = new File("d:\\demo03.txt");
File f2 = new File("demo03");
System.out.println("获取它的绝对路径:" + f1.getAbsolutePath());
System.out.println("获取f2的绝对路径:" + f2.getAbsolutePath());//会换算为绝对路径
System.out.println("获取f1封装的路径:" + f1.getPath());//构造时的路径
System.out.println("获取f2封装的路径:" + f2.getPath());//构造时的路径
System.out.println("获取f1的文件名:" + f1.getName());//文件的名字
System.out.println("获取f2的目录名:" + f2.getName());//目录的名字
System.out.println("获取f1文件的长度:" + f1.length() + " 字节");//文件大小
System.out.println("获取f2目录的长度:" + f2.length() + " 字节");//0,不要对目录获取大小
}
05.第一章:File类File类的常用方法判断的方法:
1).public boolean exists() : 此File表示的文件或目 录是否实际存在。
2).public boolean isDirectory() : 此File表示的是否为目 录。
3).public boolean isFile() : 此File表示的是否为文件
示例代码:
public static void main(String[] args) {
//
// 1).public boolean exists() : 此File表示的文件或目 录是否实际存在。
File f1 = new File(“jfkdsljfdksl”);
File f2 = new File(“d:\demo03.txt”);
File f3 = new File(“d:\xxx.txt”);
System.out.println("f1是否存在:" + f1.exists());//false
System.out.println("f2是否存在:" + f2.exists());//true
// 2).public boolean isDirectory() : 此File表示的是否为目 录。
System.out.println("f1是否是目录:" + f1.isDirectory());//false
System.out.println("f2是否是目录:" + f2.isDirectory());//false
System.out.println("f3是否是目录:" + f3.isDirectory());//true
// 3).public boolean isFile() : 此File表示的是否为文件
System.out.println("f1是否是文件:" + f1.isFile());//false
System.out.println("f2是否是文件:" + f2.isFile());//true
System.out.println("f3是否是文件:" + f3.isFile());//false
}
06.第一章:File类File类的常用方法创建和删除的方法:
1).public boolean createNewFile():当且仅当具有该名称的文件尚不存在时, 创建一个新的
空文件。
2).public boolean mkdir() : 创建由此File表示的目 录。
3).public boolean mkdirs() : 创建由此File表示的目 录, 包括任何必需但不存在的父目
录。
4).public boolean delete() : 删除由此File表示的文件或"空目录"。
示例代码:
public static void main(String[] args) throws IOException {
// 1).public boolean createNewFile():当且仅当具有该名称的文件尚不存在时, 创建一个新的
// 空文件。
File f1 = new File("demo5.txt");
if(!f1.exists()){
//创建文件
System.out.println(f1.createNewFile());
}
File f2 = new File("demo0555");
System.out.println(f2.createNewFile());//按照文件创建
// 2).public boolean mkdir() : 创建由此File表示的目 录。
File f3 = new File("demo56666");
System.out.println(f3.mkdir());
// 3).public boolean mkdirs() : 创建由此File表示的目 录, 包括任何必需但不存在的父目
// 录。
File f4 = new File("aaa\\bbb\\ccc");
System.out.println(f4.mkdirs());
// 4).public boolean delete() : 删除由此File表示的文件或“空目录”。
File f5 = new File("aaa.ffff");
System.out.println("删除文件:" + f5.delete());//不走回收站--彻底删除
File f6 = new File("demo03");
System.out.println("删除非空目录:" + f6.delete());//false
File f7 = new File("demo56666");
System.out.println("删除空目录:" + f7.delete());//true
}
07.第一章:File类File类的常用方法目录的遍历:
1).public String[] list() : 返回一个String数组, 表示该File目 录中的所有子文件或目 录。
2).public File[ ] listFiles() : 返回一个File数组, 表示该File目 录中的所有的子文件或目录。
注:上述两个方法在以下三种情况下会返回:null:
1).调用list()/listFiles()的File对象是一个“文件”;
2).调用list()/listFiles()的File对象指向的目录并不存在;
3).调用list()/listFiles()的File对象确实指向了一个目录,但目录是一个“系统目录”;
示例代码:
public static void main(String[] args) {
File dir = new File("d:\\aaa2xxxfdsfd");
if (dir.isDirectory()) {
String[] fileNameArray = dir.list();
for (String s : fileNameArray) {
System.out.println(s);
}
}
}
08.第一章:File类练习遍历单级目录:
1).练习:查询d:\\aaa2根目录下所有的.txt文件
public static void main(String[] args) {
//练习:查询d:\\aaa2根目录下所有的.txt文件
//1.封装起始目录
File dir = new File("d:\\aaa2");
//2.获取目录下所有的子文件/子目录的数组
File[] fileArray = dir.listFiles();
//3.遍历
for (File f : fileArray) {
if (f.isFile() && f.getName().endsWith(".txt")) {
System.out.println(f);
}
}
}
09.第二章:递归_前奏-方法调用解析:
public class Demo {
public static void main(String[] args) {
f1();
System.out.println("a");
}
private static void f1() {
f2();
System.out.println("b");
}
private static void f2() {
f3();
System.out.println("c");
}
private static void f3() {
System.out.println("呵呵...");
}
}
调用过程解析:
10.第二章:递归递归的概念示例_图示:
1).递归:指方法自己调用自己,这种形式叫:“方法的递归调用”简称:递归;
2).递归的注意事项:
1).递归的层次不能太深,否则栈溢出;
2).递归一定要有一个出口,否则就是“死递归”;
3).构造方法不能递归调用:否则编译错误;
3).递归为什么会导致“栈溢出”:
11.第二章:递归练习递归求阶乘:
1).什么是“阶乘”:5的阶乘可以表示为:5! = 5 * 4 * 3 * 2 * 1
2).使用循环:
int result = 1;
for(int i = 1; i <= 5 ; i++){
result *= i;
}
System.out.println(result);//120
3).从“未知”将问题分解到“已知”:
5 * 24 = 120
(未知)5!= 5 * 4!
4 * 6
4! = 4 * 3!
3 * 2
3! = 3 * 2!
2 * 1
2! = 2 * 1!
1! = 1(已知)
12.第三章:综合案例:文件搜索第一版自过滤:
1).文件搜索:搜索D:\\aaa2目录下所有的.txt文件:
public class Demo {
public static void main(String[] args) {
//查询d:\\aaa2目录下所有的.txt文件(包括子目录下)
//1.封装起始目录
File dir = new File("d:\\aaa2");
//--------递归方法--------
listFiles(dir);
System.out.println("---------查找完毕!--------------");
}
private static void listFiles(File dir) {
//2.获取目录下所有子文件/子目录的数组;
File[] fileArray = dir.listFiles();
//3.遍历数组,获取每个File对象;
if (fileArray == null) {
return;
}
for (File f : fileArray) {
//4.判断是否是.avi文件
if (f.isFile() && f.getName().endsWith(".txt")) {
// 是:打印
System.out.println(f);
} else if (f.isDirectory()) {
// 否:判断是否是目录:
// 是:从步骤2到这里形成递归
listFiles(f);
}
}
}
}
13.第三章:综合案例:文件搜索_文件过滤器说明:
public class Demo {
public static void main(String[] args) {
File dir = new File("d:\\aaa2");
//使用匿名内部类的形式
/* File[] fileArray = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isFile() && pathname.getName().endsWith(".txt")) {
return true;
}
return false;
}
});*/
//使用Lambda改版:
File[] fileArray = dir.listFiles((File pathname) -> {
if (pathname.isFile() && pathname.getName().endsWith(".txt")) {
return true;
}
return false;
});
System.out.println("集合中的内容:");
System.out.println(Arrays.toString(fileArray));
}
}
14.第三章:综合案例:文件搜索第二版过滤器:
public class Demo {
public static void main(String[] args) {
//1.封装初始目录
File dir = new File("d:\\aaa2");
//2.递归方法
listFiles(dir);
}
private static void listFiles(File dir) {
//3.使用过滤器
File[] fileArray = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if ((pathname.isFile() && pathname.getName().endsWith(".txt"))
|| pathname.isDirectory()) {
return true;
}
return false;
}
});
//4.遍历数组
if (fileArray == null) {
return;
}
for (File f : fileArray) {
if (f.isFile()) {
System.out.println(f);
}else{
//递归
listFiles(f);
}
}
}
}
15.第三章:综合案例:文件搜索_第三版_Lambda表达式:
public class Demo {
public static void main(String[] args) {
//1.封装初始目录
File dir = new File("d:\\aaa2");
//2.递归方法
listFiles(dir);
}
private static void listFiles(File dir) {
//3.使用过滤器
File[] fileArray = dir.listFiles((File pathname)-> {
if ((pathname.isFile() && pathname.getName().endsWith(".txt"))
|| pathname.isDirectory()) {
return true;
}
return false;
});
//4.遍历数组
if (fileArray == null) {
return;
}
for (File f : fileArray) {
if (f.isFile()) {
System.out.println(f);
}else{
//递归
listFiles(f);
}
}
}
}
总结:
01.能够说出File对象的创建方式
1).File(String path);
2).File(String parent,String child)
3).File(File parent,String child)
02.能够说出File类获取名称的方法名称
getName()
03.能够说出File类获取绝对路径的方法名称
getAbsolutePath()
04.能够说出File类获取文件大小的方法名称
length():单位:字节,只能对“文件”操作。
05.能够说出File类判断是否是文件的方法名称
isFile()
06.能够说出File类判断是否是文件夹的方法名称
isDirectory()
07.能够辨别相对路径和绝对路径
绝对路径:带盘符的
相对路径:不带盘符的,从项目根目录
08.能够遍历文件夹
File dir = new File(“d:\aaa2”);
File[] fileArrya = dir.listFiles();
if(fileArray != null){
for(File f : fileArray){
….
}
}
09.能够解释递归的含义
方法自己调用自己。
10.能够使用递归的方式计算5的阶乘
main(){
int num = 5;
System.out.println(num + ” 的阶乘为:” + jieCheng(num));
}
public static int jieCheng(int num){
if(num == 1){
return 1;
}
return num * jieCheng(num -1);
}
11.能够说出使用递归会内存溢出隐患的原因
递归调用时,方法会一直入栈,太多次数的递归就会导致栈溢出。