File

File类

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

static String pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。

static char pathSeparatorChar 与系统有关的路径分隔符。

static String separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。

static char separatorChar 与系统有关的默认名称分隔符。

1
2
3
4
5
String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator);//路径分隔符 windows:分号; linux:冒号:

String separator = File.separator;
System.out.println(separator);// 文件名称分隔符 windows:反斜杠\ linux:正斜杠/

Java的文件路径怎么写

Java中文件路径可以使用正斜杠“/”和反斜杠“\”,但是反斜杠需要进行转义,写成“\”才能够被识别。

1
2
3
C:\develop\a\a.txt //windows
C:/develop/a/a.txt //linux
"C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"

构造方法

public File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。

public File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//文件路径名
String pathname = "D:\\aaa.txt";
File file1 = new File(pathname);

//通过父路径和子路径字符串
String parent = "d:\\aaa";
String child = "bbb.txt";
File file3 = new File(parent, child);

//通过父级File对象和子路径字符串
File parentDir = new File("d:\\aaa");
String child = "bbb.txt";
File file4 = new File(parentDir, child);

//创建一个文件
File f1 = new File("a.txt");
if(!f1.exists()){
f1.createNewFile();
}
  • 一个File对象代表硬盘中实际存在的一个文件或者目录
  • 无论该路径下是否存在文件或者目录,都不影响File对象的创建

获取路径和名称

public String getAbsolutePath() :返回此File的绝对路径名字符串

public String getPath() :将此File转换为路径名字符串

public String getName() :返回由此File表示的文件或目录的名称

public long length() :返回由此File表示的文件的长度

1
2
3
4
5
6
7
8
9
10
public class FileGet {
public static void main(String[] args) {
File f = new File("d:/aaa/bbb.java");
System.out.println("文件绝对路径:"+f.getAbsolutePath());//d:\aaa\bbb.java
System.out.println("文件构造路径:"+f.getPath());//d:\aaa\bbb.java
System.out.println("文件名称:"+f.getName());//:bbb.java
System.out.println("文件长度:"+f.length()+"字节"); //636字节

}
}

绝对路径和相对路径

绝对路径:从盘符开始的路径,这是一个完整的路径

相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。

1
2
3
4
5
6
7
8
9
10
11
public class FilePath {
public static void main(String[] args) {
// D盘下的bbb.java文件
File f = new File("D:\\bbb.java");
System.out.println(f.getAbsolutePath()); //D:\bbb.java

// 项目下的bbb.java文件
File f2 = new File("bbb.java");
System.out.println(f2.getAbsolutePath()); //D:\Testcode\Java\file\bbb.txt
}
}

判断功能

**public boolean exists()**:此File表示的文件或目录是否实际存在。

public boolean isDirectory() :此File表示的是否为目录。

**public boolean isFile()**:此File表示的是否为文件。

1
2
3
4
5
6
7
8
9
10
11
12
public class FileIs {
public static void main(String[] args) {
File f = new File("d:\\aaa\\bbb.java");
File f2 = new File("d:\\aaa");
// 判断是否存在
System.out.println("d:\\aaa\\bbb.java 是否存在:"+f.exists());
System.out.println("d:\\aaa 是否存在:"+f2.exists());
// 判断是文件还是目录
System.out.println("d:\\aaa 文件?:"+f2.isFile());
System.out.println("d:\\aaa 目录?:"+f2.isDirectory());
}
}

创建和删除

**public boolean createNewFile()**:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

**public boolean delete()**:删除由此File表示的文件或目录。

  • 如果 file 表示一个文件,那么 delete 方法将尝试删除该文件。如果成功删除,则返回 true;否则,返回 false。
  • 如果 file 表示一个目录,那么 delete 方法将尝试删除该目录。要成功删除目录,该目录必须为空。如果目录删除成功,则返回 true;否则,返回 false。

**public boolean mkdir()**:创建由此File表示的目录。如果上级目录不存在,或者上级目录不可写,那么 mkdir 方法将失败并抛出一个 SecurityException 异常。

**public boolean mkdirs()**:创建由此File表示的目录,包括任何必需但不存在的父目录。如果上级目录不存在,mkdirs 方法会尝试递归创建所有不存在的父目录。如果创建成功,则返回 true,否则返回 false。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 文件的创建
File f = new File("aaa.txt");
System.out.println("是否存在:"+f.exists()); // false
System.out.println("是否创建:"+f.createNewFile()); // true
System.out.println("是否存在:"+f.exists()); // true

// 目录的创建
File f2= new File("newDir");
System.out.println("是否存在:"+f2.exists());// false
System.out.println("是否创建:"+f2.mkdir()); // true
System.out.println("是否存在:"+f2.exists());// true

// 创建多级目录
File f3= new File("newDira\\newDirb");
System.out.println(f3.mkdir());// false
File f4= new File("newDira\\newDirb");
System.out.println(f4.mkdirs());// true

// 文件的删除
System.out.println(f.delete());// true

// 目录的删除
System.out.println(f2.delete());// true
System.out.println(f4.delete());// false

目录的遍历

public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录。

public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。

注意:

  • list方法和listFiles方法遍历的是构造方法中给出的目录
  • 如果构造方法中给出的目录的路径不存在,会抛出空指针异常
  • 如果构造方法中给出的路径不是一个目录,也会抛出空指针异常
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class FileFor {
public static void main(String[] args) {
File dir = new File("d:\\java_code");
//获取当前目录下的文件以及文件夹的名称。
String[] names = dir.list();
for(String name : names){
System.out.println(name);
}
//获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(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
public class Demo04Recurison {
public static void main(String[] args) {
File file = new File("c:\\Game");
getAllFile(file);
}
/*
定义一个方法,参数传递File类型的目录
方法中对目录进行遍历
*/
public static void getAllFile(File dir){
System.out.println(dir);//打印被遍历的目录名称
File[] files = dir.listFiles();
for (File f : files) {
//对遍历得到的File对象f进行判断,判断是否是文件夹
if(f.isDirectory()){
//f是一个文件夹,则继续遍历这个文件夹
//我们发现getAllFile方法就是传递文件夹,遍历文件夹的方法
//所以直接调用getAllFile方法即可:递归(自己调用自己)
getAllFile(f);
}else{
//f是一个文件,直接打印即可
System.out.println(f);
}
}
}
}

过滤器实现

File[] listFiles(FileFilter filter) :这个方法用于返回表示目录中满足指定过滤器条件的文件和目录的数组。

java.io.FileFilter接口用于抽象路径名(File对象)的过滤器。

FileFilter接口中的抽象方法

boolean accept(File pathname) :其中 pathname 是文件或目录的 File 对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class FileFilterImpl implements FileFilter{
@Override
public boolean accept(File pathname) {
/*
过滤的规则:
在accept方法中,判断File对象是否是以.java结尾
是就返回true
不是就返回false
*/
//如果pathname是一个文件夹,返回true,继续遍历这个文件夹
if(pathname.isDirectory()){
return true;
}
return pathname.getName().toLowerCase().endsWith(".java");
}
}
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
public class Demo01Filter {
public static void main(String[] args) {
File file = new File("c:\\abc");
getAllFile(file);
}
/*
定义一个方法,参数传递File类型的目录
方法中对目录进行遍历
*/
public static void getAllFile(File dir){
File[] files = dir.listFiles(new FileFilterImpl());//传递过滤器对象
for (File f : files) {
//对遍历得到的File对象f进行判断,判断是否是文件夹
if(f.isDirectory()){
//f是一个文件夹,则继续遍历这个文件夹
//我们发现getAllFile方法就是传递文件夹,遍历文件夹的方法
//所以直接调用getAllFile方法即可:递归(自己调用自己)
getAllFile(f);
}else{
//f是一个文件,直接打印即可
System.out.println(f);
}
}
}
}

File[] listFiles(FilenameFilter filter):用于返回表示目录中满足指定文件名过滤器条件的文件和目录的数组。

FilenameFilter接口抽象方法

boolean accept(File dir, String name) :其中 dir 是当前目录的 File 对象,name 是文件或目录的名称

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
class Demo02Filter {
public static void main(String[] args) {
File file = new File("c:\\abc");
getAllFile(file);
}


/*
定义一个方法,参数传递File类型的目录
方法中对目录进行遍历
*/
public static void getAllFile(File dir){

File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//过滤规则,pathname是文件夹或者是.java结尾的文件返回true
return new File(dir,name).isDirectory() || name.toLowerCase().endsWith(".java");
}
});


for (File f : files) {
//对遍历得到的File对象f进行判断,判断是否是文件夹
if(f.isDirectory()){
//f是一个文件夹,则继续遍历这个文件夹
//我们发现getAllFile方法就是传递文件夹,遍历文件夹的方法
//所以直接调用getAllFile方法即可:递归(自己调用自己)
getAllFile(f);
}else{
//f是一个文件,直接打印即可
System.out.println(f);
}
}
}
}

File
http://example.com/2023/05/26/Java/JavaIO/1. File类/
作者
PALE13
发布于
2023年5月26日
许可协议