Java之File详解(含几个综合练习)
构造方法
| 方法 | 说明 |
|---|---|
public File(String pathname) |
根据文件路径创建文件对象 |
public File(String parent,String child) |
根据父路径名字符串和子路径名字符串创建文件对象 |
public File(File parent,String child) |
根据父路径对应文件和子路径名字符串创建文件对象 |
1.根据字符串表示的路径,变成File对象1
2
3String 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.txt1
2
3
4String 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
4File 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
4File 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
4File 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
7File 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
3File 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
7File 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
3File 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
3File 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 | File f2 = new File("D:\\Develop\\Java\\Code\\Learn\\basic_code\\day1121_code\\src\\filedemo1\\aaa"); |
3.mkdirs 创建多级文件夹
细节:既可以创建单级的,又可以创建多级的文件夹1
2
3File 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表示的路径是需要权限才能访问的文件夹时,返回null1
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
2File[] arr = File.listRoots();
System.out.println(Arrays.toString(arr));
list() 获取当前该路径下所有内容(仅仅能获取名字)1
2
3
4
5File 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 | String[] arr3 = f2.list(new FilenameFilter() { |
用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() {
public boolean accept(File pathname) {
return pathname.isFile() && pathname.getName().endsWith(".txt");
}
});
//调用listFiles(FilenameFilter filter)
File[] arr5 = f.listFiles(new FilenameFilter() {
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
9public 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
3File file = new File("D:\\aaa\\bbb");
boolean b = haveAvi(file);
System.out.println(b);
三
删除一个多级文件夹
如果我们要删除一个有内容的文件夹
1.先删除文件夹里面所有的内容
2.再删除自己
1 | public static void delete(File src){ |
四
查找电脑所有以avi后缀结尾的文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public 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 | public static long getLen(File src){ |




















