构造方法

方法 说明
public File(String pathname) 根据文件路径创建文件对象
public File(String parent,String child) 根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent,String child) 根据父路径对应文件和子路径名字符串创建文件对象
代码演示

1.根据字符串表示的路径,变成File对象

1
2
3
String str = "D:\\Develop\\java\\learn\\basic_code\\a.txt";  
File f1 = new File(str);
System.out.println(f1);

2.父级路径:D:\Develop\java\learn\basic_code
子级路径:a.txt

1
2
3
4
String parent = "D:\\Develop\\java\\learn\\basic_code";  
String child = "a.txt";
File f2 = new File(parent,child);
System.out.println(f2);

这样也行,但是不推荐,不同操作系统的路径分隔符不一样
1
File f3 = new File(parent + "\\" + child);  

3.把一个File表示的路径和String表示路径进行拼接

1
2
3
4
File parent2 = new File("D:\\Develop\\java\\learn\\basic_code");  
String child2 = "a.txt";
File f4 = new File(parent2,child2);
System.out.println(f4);

常用方法

判断类

方法 说明
public boolean isDirectory() 判断此路径名表示的File是否为文件夹
public boolean isFile() 判断此路径名表示的File是否为文件
public boolean exists() 判断此路径名表示的File是否存在
代码演示

1.对一个文件的路径进行判断

1
2
3
4
File f1 = new File("D:\\Develop\\Java\\Code\\learn\\basic_code\\day1120_code\\src\\filedemo\\fileDemo2.java");  
System.out.println(f1.isDirectory());
System.out.println(f1.isFile());
System.out.println(f1.exists());

2.对一个文件夹的路径进行判断

1
2
3
4
File f2 = new File("D:\\Develop\\Java\\Code\\learn\\basic_code");  
System.out.println(f2.isDirectory());
System.out.println(f2.isFile());
System.out.println(f2.exists());

查询类

方法 说明
public long length() 返回文件的大小
public String getAbsolutePath() 返回文件的绝对路径
public String getPath() 返回定义文件时使用的路径
public String getName() 返回文件的名称,带后缀
public long lastModified() 返回文件的最后修改时间(时间毫秒值)
代码演示

1.length 返回文件的大小(字节数量)
细节一:这个方法只能获取文件的大小吗,单位是字节
如果单位我们要是M,G,可以不断地除以1024
细节2:这个方法无法获取文件夹的大小
如果我们要获取一个文件夹的大小,需要把这个文件夹里面所有的文件都累加在一起

1
2
3
4
5
6
7
File f1= new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1\\a.txt");  
long len = f1.length();
System.out.println(len);//15

File f2 = new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1");
long len2 = f2.length();
System.out.println(len2);//0

2.getAbsolutePath 返回文件的绝对路径

1
2
3
File f3 = new File("basic_code\\day1121_code\\filedemo1\\a.txt");  
String path1 = f3.getAbsolutePath();
System.out.println(path1);

3.getPath 返回定义文件时使用的路径

1
2
3
4
5
6
7
File f5 = new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1\\a.txt");  
String path3 = f5.getPath();
System.out.println(path3);

File f6 = new File("basic_code\\a.txt");
String path4 = f6.getPath();
System.out.println(path4);

4.getName 获取名字
细节,文件获取的是文件名加后缀名 ,文件夹就只有文件夹名

1
2
3
File f7 = new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1\\a.txt");  
String name1 = f7.getName();
System.out.println(name1);

操作类

方法 说明
public boolean createFile() 创建一个新的空的文件
public boolean mkdir() 创建单级文件夹
public boolean mkdirs() 创建多级文件夹
public boolean delete() 删除文件、文件夹

代码演示
1.createNewFile 创建一个新的空文件
细节1:如果当前路径表示的文件是不存在的,则创建成功,方法返回true,
如果当亲啊路径表示的文件是存在的,则创建失败,方法返回false
细节2:如果父级路径是不存在的,那么方法会有异常IOException
细节3:creatNewFile方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀名的文件

1
2
3
File f1 = new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1\\test.txt");  
boolean b = f1.createNewFile();
System.out.println(b);

2.mkdir make Directory. 文件夹(目录)
细节1:windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false
细节2:mkdir方法只能创建单级文件夹,无法创建多级文件夹。

1
2
3
File f2 = new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1\\aaa");  
boolean b2 = f2.mkdir();
System.out.println(b2);

3.mkdirs 创建多级文件夹
细节:既可以创建单级的,又可以创建多级的文件夹

1
2
3
File f3 = new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1\\aaa\\ggg");  
boolean b3 = f3.mkdirs();
System.out.println(b3);

public boolean delete() 删除文件、空文件夹
细节:
如果删除的是文件,则直接删除,不走回收站 如果山粗的是空文件夹,则直接删除,不走回收站 如果删除的是有内容的文件夹,则删除失败

1
2
3
4
5
//1.创建File对象  
File f1 = new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1\\test.txt");
//2.删除
boolean b = f1.delete();
System.out.println(b);

File[]

方法 说明
public static File[] listRoots() 列出可用的文件系统根
public String[] list() 获取当前该路径下的所有内容
public String[] list(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles() 获取当前路径下所有内容
public File[] listFiles(FileFilter filter) 利用文件名过滤器获取当前该路径下所有内容
public File[] listFiles(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容

代码演示
public File[] listFiles() 获取当前路径下的所有内容
当调用者File表示的路径不存在时,返回null
当调用者File表示的路径是文件时,返回null
当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含颖仓文件
当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

1
2
3
4
5
6
7
8
//1.创建File对象  
File f= new File("D:\\aaaabbbbccc");
//2.listFiles方法
//作用:获取aaaabbbbccc文件夹里面的所有内容,把所有内容放到数组中返回
File[] files = f.listFiles();
for (File file : files) {
//file依次表示这个文件夹里面的每一个文件或者文件夹
System.out.println(file);

1.listRoots 获取系统中所有的盘符

1
2
File[] arr = File.listRoots();  
System.out.println(Arrays.toString(arr));

list() 获取当前该路径下所有内容(仅仅能获取名字)

1
2
3
4
5
File f1 = new File("D:\\aaa");  
String[] arr2 = f1.list();
for (String string : arr2) {
System.out.println(string);
}

3.list(FilenameFilter filter) 利用文件名过滤器获取当前该路径下所有内容
需求:我现在要获取D://aaa文件夹里面所有的txt文件

1
File f2 = new File("D:\\aaa");

accept方法的形参,依次表示aaa文件夹里面每一个文件或者文件夹路径
参数一:父级路径
参数二:子级路径
返回值:如果返回值为true,就表示当前路径保留
如果返回值为false,就表示当前路径舍弃不要

1
2
3
4
5
6
7
String[] arr3 = f2.list(new FilenameFilter() {  
@Override
public boolean accept(File dir, String name) {
File src = new File(dir,name);
return src.isFile()&&name.endsWith(".txt");
}
});

用listFile实现同样的功能

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
//1.创建File对象  
File f = new File("D:\\aaa");
//2.需求:打印里面所有的txt文件
File[] arr4 = f.listFiles();
for (File file : arr4) {
//file依次表示aaa文件夹里面每一个文件或者文件夹的路径
if(file.isFile() && file.getName().endsWith(".txt")){
System.out.println(file);
}
}

//创建File对象
File f3 = new File("D:\\aaa");
//调用listFiles(FileFilter filter)
File[] arr1 = f.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isFile() && pathname.getName().endsWith(".txt");
}
});

//调用listFiles(FilenameFilter filter)
File[] arr5 = f.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File src = new File(dir,name);
return src.isFile() && name.endsWith(".txt");
}
});
System.out.println(Arrays.toString(arr5));

综合小练习

//需求:在当前模块下的aaa文件夹中创建一个a.txt文件

1
2
3
4
5
6
7
8
9
10
11
12
//1.创建a.txt的父级路劲  
File file = new File("day1121_code\\aaa");
//2.创建父级路径
file.mkdirs();
//3.拼接父级路径和子级路径
File src = new File(file,"a.txt");
boolean b = src.createNewFile();
if(b){
System.out.println("创建成功");
}else{
System.out.println("创建失败");
}

定义一个方法找某一个文件夹,是否有过avi结尾的电影

1
2
3
4
5
6
7
8
9
public static boolean haveAvi(File file){  
File[] list = file.listFiles();
for (File f : list) {
if(f.isFile()&&f.getName().endsWith(".avi")){
return true;
}
}
return false;
}

调用:
1
2
3
File file = new File("D:\\aaa\\bbb");  
boolean b = haveAvi(file);
System.out.println(b);

删除一个多级文件夹
如果我们要删除一个有内容的文件夹
1.先删除文件夹里面所有的内容
2.再删除自己

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void delete(File src){  
//1.先删除文件夹里面所有的内容
//进入src
File[] files = src.listFiles();
//遍历
for (File file : files) {
//先判断,如果是文件,删除
if(file.isFile()){
file.delete();
}else{
//判断,如果是文件夹,就递归
delete(file);
}
}
}

查找电脑所有以avi后缀结尾的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void findAvi(){  
File[] file= File.listRoots();
for (File file1 : file) {
findAvi(file1);
}
}

public static void findAvi(File file) {
File[] list = file.listFiles();
if (list != null) {//非空判断,不然空指针异常
for (File file1 : list) {
if (file1.isFile()) {
if (file1.getName().endsWith(".avi")) {
System.out.println(file1);
}
} else {
findAvi(file1);
}
}
}
}

作用:
统计一个文件夹的总大小参数:
表示要统计的那个文件夹返回值:
统计之后的结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static long getLen(File src){  
//1.定义变量进行累加
long len = 0;
//2.进入src文件夹
File[] files = src.listFiles();
//排除空指针异常
if(files!=null){
//3.遍历数组
for (File file : files) {
//4.判断
if(file.isFile()){
//我们就把当前文件的大小累加到len当中
len = len + file.length();
}else{
//判断,如果是文件夹就递归
len = len + getLen(file);
}
}
}

return len;
}