0%

Java基础—File类与递归

此部分记录了File类与递归的使用作为IO流部分的铺垫

File类的部分主要涉及「File类的创建、判断、获取路径与文件名、删除」等的操作

递归部分主要包括递归的含义以及使用「递归实现遍历目录」

File类

File类概述与构造方法

概述

  • 它是文件和目录路径名的抽象表示
  • 文件和目录是可以通过File封装成对象的
  • 具体文件可存在也可不存在

构造函数

方法名 说明
File(String pathname) 给定的路径名字符串转换为抽象路径名 创建新的 File实例
File(String parent, String child) 从父路径名字符串+子路径名字符串 创建新的 File实例
File(File parent, String child) 从父抽象路径名+子路径名字符串 创建新的 File实例

绝对路径 与 相对路径

  • 绝对路径:完整的路径名,不需要任何其他信息就可以定位它所表示的文件。例如:E:\itcast\java.txt
  • 相对路径:必须使用取自其他路径名的信息进行解释。例如:myFile\java.txt

示例

1
2
3
4
5
6
7
8
9
10
11
12
//File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File f1 = new File("C:\\Users\\railm\\Downloads\\Aliyun_Download\\Java笔记\\二阶day8资料\\素材\\itcast\\java.txt");
System.out.println(f1);

//File(String parent, String child):从父路径名字符串和子路径名字符串创建新的 File实例。
File f2 = new File("C:\\Users\\railm\\Downloads\\Aliyun_Download\\Java笔记\\二阶day8资料\\素材\\itcast", "java.txt");
System.out.println(f2);

//File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。
File f3 = new File("File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。");
File f4 = new File("java.txt");
System.out.println(f4);

File类的创建功能

方法

方法名 说明
public boolean createNewFile() 该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
public boolean mkdir() 创建由此抽象路径名命名的目录
public boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录

※如果有同名的“文件夹”会造成文件创建失败

示例

1
2
3
4
5
6
7
8
9
10
11
12
//需求1:我要在E:\\itcast目录下创建一个文件java.txt
File f1 = new File("C:\\itcast\\java.txt");
System.out.println(f1.createNewFile());


//需求2:我要在E:\\itcast目录下创建一个目录JavaSE
File f2 = new File("C:\\itcast\\JavaSE");
System.out.println(f2.mkdir());

//需求3:我要在E:\\itcast目录下创建一个多级目录JavaWEB\\HTML
File f3 = new File("C:\\itcast\\JavaWEB\\HTML");
System.out.println(f3.mkdirs());

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
39
40
41
import java.io.File;

public class FileDemo04 {
public static void main(String[] args) {
File f = new File("C:\\itcast\\java.txt"); //使用 myFile 指向当前文件目录

// public boolean isDirectory():测试此抽象路径名表示的File是否为目录
// public boolean isFile():测试此抽象路径名表示的File是否为文件
// public boolean exists():测试此抽象路径名表示的File是否存在
System.out.println(f.isDirectory());
System.out.println(f.isFile());
System.out.println(f.exists());

// public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
// public String getPath():将此抽象路径名转换为路径名字符串
// public String getName():返回由此抽象路径名表示的文件或目录的名称
System.out.println(f.getAbsoluteFile());
System.out.println(f.getPath());
System.out.println(f.getName());

// public String[] list():返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
// public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组
// --数组需要遍历哦--
File f2 = new File("C:\\itcast");
String[] s = f2.list();
for(String st : s){
System.out.println(st);
}
File[] ft = f2.listFiles();
for(File file : ft){
System.out.println(file);//打印路径
System.out.println(file.getName());//和 f2.list() 结果一致,给出文件名

//意义:取出所有文件名,规避目录
if(file.isFile()){
System.out.println(file.getName());
}
}
}
}

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
25
26
27
28
29
import java.io.File;
import java.io.IOException;

public class FileDemo03 {
public static void main(String[] args) throws IOException {
File f1 = new File("C:\\itcast\\java.txt");
//目录下创建java.txt
System.out.println(f1.createNewFile());
//删除
System.out.println(f1.delete());
//创建文件夹
File f2 = new File("C:\\itcast\\itcast2");
System.out.println(f2.mkdir());
//删除文件夹
System.out.println(f2.delete());

/* 目录套文件 */
//创建目录并创建文件
File f3 = new File("C:\\itcast\\itcast3");
f3.mkdir();
File f4 = new File("C:\\itcast\\itcast3\\java.txt");
f4.createNewFile();
//创建文件之前应该创建目录

//删除itcast目录(目录内有内容),需要先删除内容
System.out.println(f4.delete());
System.out.println(f3.delete());
}
}

递归

递归概述

递归式是方法自己调用自己

注意事项

  • 递归一定要有出口,否则内存溢出
  • 递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出

递归遍历目录

思路

  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
public class DiGuiDemo02 {
public static void main(String[] args) {
File f = new File("C:\\Users\\railm\\Downloads\\Aliyun_Download\\Java笔记\\二阶day8资料\\素材\\itcast");
getAllFilePath(f);
}

public static void getAllFilePath(File f){
File[] fileArray = f.listFiles();
//保证文件健壮性,做个非空判断
if(fileArray != null) {
for (File file : fileArray) {
// 判断该File对象是否是目录
// 是:递归调用
// 不是:获取绝对路径输出在控制台
if (file.isDirectory()) {
getAllFilePath(file);
} else {
System.out.println(file.getAbsolutePath());
}
}
}
}
}