前言

b站java课程学习笔记整理。

b站视频: 黑马程序员全套Java教程_Java基础入门视频教程,零基础小白自学Java必备教程

272. File类概述和构造方法

272.1 File类概述

File:它是文件和目录路径名的抽象表示。

  • 文件和目录路径名可以通过File封装成对象类。
  • 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以实存在的,也可以是不存在的。
  • 将来是要通过具体的操作把这个路径的内容转换为具体存在的。

272.2 File类构造方法

File的构造方法:

方法名 说明
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
File(String parent,String child) 从父路径命字符串到子路径名字符串创建新的File实例
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的File实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package File类概述和构造方法;

import java.io.File;

public class FileDemo {
public static void main(String[] args) {
File f1 = new File("E/theshy/java.txt");
System.out.println(f1);

File f2 = new File("E/theshy","java.txt");
System.out.println(f2);

File f3 = new File("E/theshy");
File f4 = new File(f3,"java.txt");
System.out.println(f4);
}
}

273. File类创建功能

方法名 说明
public boolean createNewFile() 当具有该名称的文件不存在时,擦混关键一个由该抽象路径名命名的新空文件
public boolean mkdir() 创建由此抽象路径名命名的目录
public boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必须但不存在的父目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package File类概述和构造方法;

import java.io.File;
import java.io.IOException;

public class FileDemo2 {
public static void main(String[] args) throws IOException {
// true 为创建成功,false为文件已经存在

// 创建文件
File f1 = new File("E:\\theshy\\java.txt");
System.out.println(f1.createNewFile());

// 创建文件夹
File f2 = new File("E:\\theshy\\javaSE");
System.out.println(f2.mkdir());

// 创建多级目录
File f3 = new File("E:\\theshy\\javaWEB\\HTML");
System.out.println(f3.mkdirs());


}
}

注意: true 为创建成功,false为文件已经存在. 文件和目录名字不能一样。

274. File类判断和获取功能

方法名 说明
public boolean isDirectory() 判断此抽象路径名表示的File是否为目录
public boolean isFile() 测试此抽象路径名表示的File是否为文件
public boolean exists() 测试此抽象路径名表示的File是否存在
public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
public String getPath() 将此抽象路径名转换为路径名字符串
public String getName() 返回由此抽象路径名表示的文件或目录的名称
public String[] list() 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
public File[] listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package File类概述和构造方法;

import java.io.File;

public class FileDemo3 {
public static void main(String[] args) {
File f1 = new File("idea_test\\src\\File类概述和构造方法\\FileDemo.java");

System.out.println(f1.isDirectory());
System.out.println(f1.exists());
System.out.println(f1.isFile());

System.out.println(f1.getAbsolutePath());
System.out.println(f1.getPath());
System.out.println(f1.getName());

File f2 = new File("E:\\theshy");
String[] list = f2.list();
System.out.println("--------------------------");
for(String str: list){
System.out.println(str);
}
System.out.println("--------------------------");
File[] files = f2.listFiles();
for(File file:files){
System.out.println(file);
System.out.println(file.getName());
}
System.out.println("--------------------------");
// 只要文件
for(File file:files){
if(file.isFile()){
System.out.println(file.getName());
}
}
}
}

275. File删除功能

方法名 说明
public boolean delete 删除文件或目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package File类概述和构造方法;

import java.io.File;
import java.io.IOException;

public class FileDemo4 {
public static void main(String[] args) throws IOException {
// 在项目的某个包里创建文件
File f1 = new File("idea_test\\src\\File类概述和构造方法\\java.txt");
System.out.println(f1.createNewFile());

// 在项目的某个包里删除文件
System.out.println(f1.delete());

// 在项目的某个包里创建目录
File f2 = new File("idea_test\\src\\File类概述和构造方法\\java");
System.out.println(f2.mkdir());

// 在项目的某个包里删除包
System.out.println(f2.delete());
// 如果该目录下有内容,那不能直接删除目录。要先删文件。
}
}

如果该目录下有内容,那不能直接删除目录。要先删文件。

276. 递归

递归指的是方法定义中调用方法自身的现象。

递归解决不死神兔问题的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package 递归;

public class DiGui {
public static void main(String[] args) {
System.out.println(f(20));

}

public static int f(int n){
if(n==1||n==2){
return 1;
}
return f(n-1)+f(n-2);
}
}

注意递归要有出口。(出口就是return一个具体的结果,不return这个函数本身了。)

递归解决问题的思路:把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算。

277. 递归求阶乘

需求: 用递归求5的阶乘,并把结果在控制台输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package 递归;

public class JieCheng {
public static void main(String[] args) {
System.out.println(f(5));
}

public static int f(int n) {
if (n == 1 || n == 0) {
return 1;
}
return n * f(n - 1);
}
}

在内存中的执行图:
递归求阶乘的堆栈图

注意:栈是一端开口,先进后出!

278. 遍历目录

需求:给定一个路径,通过递归完成遍历该目录下的所有内容,并把所有文件的绝对路径输出在控制台。

思路:

  1. 根据给定的路径创建一个File对象
  2. 定义一个方法,用于获取给定目录下的所有内容,参数为第1步创建的File对象
  3. 获取给定的File目录下所有的文件或者目录的File数组
  4. 遍历该File数组,得到每一个File对象
  5. 判断该File对象是否是目录
    • 是:递归调用
    • 否:获取绝对路径输出在控制台
  6. 调用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package 遍历目录;

import java.io.File;

public class FolderCheck {
public static void main(String[] args) {
File f1 = new File("E:\\theshy");
check(f1);


}

public static void check(File dir){
File[] files = dir.listFiles();
if(files!=null){
for (File file: files){
if(file.isFile()){
System.out.println(file.getAbsolutePath());
}else if(file.isDirectory()){
check(file);
}else{
System.out.println("发生错误");
break;
}
}
}else {
System.out.println("该文件夹不存在!");
}


}
}