0%

File

概述

1、表示一个路径,可以是文件的路径,也可以是文件夹的路径
2、这个路径可以是存在的,也允许是不存在的

File对象的作用

a. 表示一个路径
b. 可以通过调用File类中定义的方法,操作本地文件或目录

构造函数

1
2
3
4
5
6
7
8
根据文件路径字符串创建文件对象
pulbic File(String pathname)

根据父路径字符串和子路径字符串创建文件对象(pathname + child拼接后,再创建对象)
public File(String pathname,String child)

根据父路径 文件对象 和子路径字符串创建文件对象
public File(File parent,String child)

注意:由于File本身是表示一个路径,所以我们不能使用无参构造函数创建File对象
例题:

1
2
3
4
5
6
7
8
9
10
// 路径字符串
File file01 = new File("E:\\Users\\C\\Desktop\\a.txt");

// 父路径 + 子路径 拼接
File file02 = new File("E:\\Users\\C\\Desktop","a.txt");

// 父路径文件对象 + 子路径字符串 拼接
File file03 = new File("E:\\Users\\C\\Desktop"); // 父路径 文件对象
File file04 = new File(file03,"a.txt"); // 父路径文件对象 + 子路径字符串

File中常用方法

1
2
3
4
5
6
7
8
public bool isDirectory()           判断是否是文件夹
public bool isFile() 判断是否是文件
public bool exits() 判断File表示的路径是否存在
public long length 返回文件的大小(字节数量)
public String getAbsolutePath() 返回文件的绝对路径
public String getPath() 返回定义文件时使用的路径
public String getName() 返回文件的名称,带后缀
public long lastModified() 返回文件的最后修改时间(时间毫秒值)

例题:

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
File file = new File("D:\\Lenovo\\桌面\\a.txt");
// 1. 判断是否是文件夹
boolean bool01 = file.isDirectory();
System.out.println(bool01);

// 2. 判断是否是文件
boolean bool02 = file.isFile();
System.out.println(bool02);

// 3. 判断File表示的路径是否存在
boolean bool03 = file.exists();
System.out.println(bool03);

// 4. 获取文件的大小(字节数)
// 注意:
// length()只能获取 文件的 大小,不能获取文件的大小
// 如果想获取文件夹的大小,则需要将文件夹内的所有文件的大小相加即可
long size = file.length();
System.out.println(size);

// 5. 返回文件的绝对路径
String path = file.getAbsolutePath();
System.out.println(path);

// 6. 返回定义文件时使用的路径
String path02 = file.getPath();
System.out.println(path02);

// 7. 返回文件名
// 注意:如果是文件,则会带上文件的后缀名,如果是文件夹,则会直接返回文件夹的名字
String fileName = file.getName();
System.out.println(fileName);

// 8. 返回文件最后修改的时间
long date = file.lastModified();
System.out.println(date);

创建和删除的方法

1
2
3
4
public boolean createNewFile()     创建一个空的文件夹
public boolean mkdir() 创建单个文件夹
public boolean mkdirs() 创建多级文件夹
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
30
31
32
33
34
35
36
 File file01 = new File("D:\\Lenovo\\桌面\\b.txt");

// 1. 创建空文件
// 返回值:创建文件是否成功
// 当路径表示的文件存在,则创建失败,返回false
// 当路径表示的路径不存在,则创建成功,返回true
// 当路径是错误的(如:父级路径不存在),则程序直接抛出异常

// 注意:createNewFile创建的一定是文件,当给的路径是没有后缀名的,则会创建一个没有后缀名的文件
boolean bool01 = file01.createNewFile();
System.out.println(bool01);

// 2. 创建目录
// 注意:
// 1. 当创建的文件夹,存在则创建失败,返回false
// 2. mkdir只能创建单级文件夹,不能创建多级文件夹(父级目录也不存在)
// 3. 父级目录不存在时,创建文件夹失败,返回false,程序不会抛出异常
File file02 = new File("D:\\Lenovo\\桌面\\ee\\ff");
boolean bool02 = file02.mkdir();
System.out.println(bool02);

// 3. 创建多级文件夹(既能创建单级目录,也可以创建多级目录)
File file03 = new File("D:\\Lenovo\\桌面\\ee\\ff");
boolean bool03 = file03.mkdirs();
System.out.println(bool03);

// 4. 删除文件 或 空文件夹()
File file04 = new File("D:\\Lenovo\\桌面\\b.txt");
boolean bool04 = file04.delete();
System.out.println(bool04);
// 如果删除的目录,不是空的,则删除失败,返回false
File file05 = new File("D:\\Lenovo\\桌面\\ee\\ff");
boolean bool05 = file05.delete();
System.out.println(bool05);

// 注意:delete只能删除 文件 和 空文件夹 不走回收站

获取路径下的所有文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
获取目录下的文件,并进行遍历
方法:
public File[] listFiles() 获取当前路径下的所有内容
注意:
1. 当路径不存在时,则返回null
2. 当路径表示的是文件时,返回null
3. 当路径表示的是一个空文件夹时,则返回一个长度为0的数组
4. 当路径是一个有内容的文件夹时,则返回文件夹内的所有文件和文件夹(数组的形式返回)
5. 当路径是一个 “隐藏文件夹” 时,则会将文件夹和文件(包括隐藏文件)全部返回(以数组的形式)
6. 当路径是一个 “需要权限”的文件夹时,则返回null


其他方法:
listRoots()、list()、list(FilenameFilter filter)、listFiles(FileFilter filter)、
listFiles(FilenameFilter filter)

例题:
listFiles():获取路径下的所有内容(文件/文件夹)

1
2
3
4
5
6
7
8
9
10
File file = new File("D:\\Lenovo\\桌面\\ee");
File[] files = file.listFiles();
// 遍历并删除
for (File file1 : files) {
// 在删除之前应该要判断是否是文件还是文件夹
// 原因:delete只能删除空文件夹,所以要做特殊处理
// 这里没有做判断,是因为测试时,目录全是空的
boolean bool = file1.delete();
System.out.println(bool);
}

listRoots():静态方法,获取系统中的所有盘符

1
File[] arr = File.listRoots();

list():获取当前路径下的所有内容(只能获取文件名称/文件夹名称)

1
2
3
4
5
// 如果是文件夹,则是文件夹名,如果是文件,则是文件名(有后缀)
// 与listFiles()的区别:
// list只能获取文件名,而listFiles获取到的是完整的路径
File file01 = new File("D:\\Lenovo\\桌面\\ee");
String[] strings = file01.list();

list(FilenameFilter filter):利用文件名过滤,获取当前路径下的所有内容

1
2
3
4
5
6
7
8
9
10
11
12
13
// FilenameFilter:函数式接口
String[] strings1 = file01.list(new FilenameFilter() {
/*
* dir:父级路径
* name:文件名(没有路径,仅仅是名字)
* 返回值:true,则表示满足条件,保留,如果false,则当前文件舍弃
* */
@Override
public boolean accept(File dir, String name) {
// 所有的内容都舍弃
return false;
}
});