一,File概述
Java 的 File
类是 java.io
包中用于表示文件和目录路径名的核心类。它提供了丰富的功能来操作文件系统中的文件和目录
- File对象就是表示一个路径,可以是文件的路径,也可也是目录的路径
- 这个路径是存在的,也允许是不存在的。
- File只能对文件本身进行操作,不能读写文件里面的数据
二,File类创建的构造方法
方法名 | 说明 |
---|---|
public File(String pathname) | 根据文件路径创建对象 |
public File(String parent,String child) | 根据父路径名字符串和子路径名字符串创建文件对象 |
举例: path="C:\Users\WDADWA\Desktop\learn_file\java\a.txt
"
父级路径:C:\Users\WDADWA\Desktop\learn_file\java
子级路径:a.txt"
java
import java.io.File;
public class text {
public static void main(String[] args) {
String path1="C:\\Users\\WDADWA\\Desktop\\learn_file\\java\\a.txt";
String path2="C:\\Users\\WDADWA\\Desktop\\learn_file\\java";
File f1=new File(path1);//根据文件路径创建File类
File f2=new File(path2,"a.txt");//根据父级路径+子级路径创建File类
File parent=new File("C:\\Users\\WDADWA\\Desktop\\learn_file\\java");
File f3=new File(parent,"a.txt");//根据父级路径对象+子级路径字符串创建对象
System.out.println(f1);
//其他路径的写法
File f1=new File("D:\\test\\test.txt");//用\\是因为单独一个\是代表转义字符
File f2=new File("D:/test/test.txt");//这个是windows的写法
File f3=new File("D:"+File.separator+"test"+File.separator+"test.txt");//这种就是适合所有系统的分割符
}
}
三,File的常见成员方法
3.1 判断
方法名 | 说明 |
---|---|
public boolean isDirectory() | 判断此路径名表示的File是否为文件夹 |
public boolean isFile() | 判断此路径名表示的File是否为文件 |
public boolean exists() | 判断此路径名表示的File是否存在 |
3.2 获取文件信息
方法名 | 说明 |
---|---|
public long length() | 返回文件的大小(字节数量) |
public String getAbsolutePath() | 返回文件的绝对路径 |
public String getPath() | 返回定义文件时使用的路径 |
public String getName() | 返回文件的名称,带后缀 |
public long lastModified() | 返回文件的最后修改时间(毫秒值) |
length方法只能获取文件的大小,单位是字节。如果要获取文件夹的大小,需要把文件夹内所有的文件大小累加。
3.3 创建
方法名 | 说明 |
---|---|
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 创建单级文件夹 |
public boolean mkdirs() | 创建多级文件夹 |
createNewFile方法
如果当前路径表示的文件是不存在的,则创建成功,返回true
如果当前路径表示的文件是存在的,则创建不成功,返回false
如果父级路径不存在,方法会返回IO异常报错。
createNewFile创建的一定是文件,如果路径不包含文件后缀,则创建一个没有后缀的文件
3.4 删除
方法名 | 说明 |
---|---|
public boolean delete() | 删除文件/文件夹 |
delete方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站。
delete如果删除的是有内容的文件夹,则删除失败,返回false。
3.5 获取并遍历
3.5.1 listFiles类型
方法名 | 说明 |
---|---|
public File[] listFiles() | 获取当前路径下所有的内容。(重点掌握这个即可) |
public File[] listFiles(FileFilter filter) | 利用文件过滤器获取当前路径下所有内容 |
public File[] listFiles(FilenameFilter filter) | 利用文件名过滤器获取当前路径下所有内容 |
listFiles
使用空参方法时
- 当调用者File表示的路径不存在时,返回null
- 当调用者File表示的是文件的时候,返回null
- 当调用者File表示的路径是一个空文件夹,返回一个长度为0的数组
- 当调用者File表示的路径是一个有内容的文件夹时,将里面所有的文件和文件夹的路径放到File数组中返回。
- 当调用者File表示的路径是一个有隐藏文件的文件夹 时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件。
- 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null
listFiles
使用有参方法时
-
当填入参数:
FileFilter filter
javaimport java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; import java.io.IOException; public class text { public static void main(String[] args) throws IOException { String path="C:\\aaa"; File f1=new File(path); File[] files=f1.listFiles(new FileFilter() { @Override //这里的参数表示路径中文件夹每一个文件 //返回值,如果为true保留,false舍弃 public boolean accept(File pathname) { //保留D:\aaa文件夹中所有.txt文件 return pathname.isDirectory() && pathname.getName().endsWith(".txt"); }//和FilenameFilter的区别就是accept方法形参不一样。 }); } }
-
当填入参数:
FilenameFilter filter
javaimport java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; import java.io.IOException; public class text { public static void main(String[] args) throws IOException { String path="C:\\Users\\WDADWA\\Desktop\\learn_file"; File f1=new File(path); File[] files=f1.listFiles(new FilenameFilter() { @Override //第一个参数表示:父级路径对象 //第二个参数表示:子级路径字符串 //返回值:如果返回值为true,就表示当前路径留下,如果为false就表示当前路径不留下 //举例:获取D:\\aaa文件夹内所有的.txt文件 public boolean accept(File dir, String name) { File f=new File(dir,name); return f.isDirectory() && f.getName().endsWith(".txt"); } }); } }
3.5.2 list类型
方法名 | 说明 |
---|---|
public String[] list() | 获取当前路径下所有内容(返回路径下的文件名字) |
public String[] list(FilenameFilter filter) | 利用文件名过滤器获取当前路径下所有内容 |
list(FilenameFilter filter)方法详解
-
参数
FilenameFilter filter
是一个函数式接口javapublic class text { public static void main(String[] args) throws IOException { String path="D:\\aaa"; File f1=new File(path); String[] f2=f1.list(new FilenameFilter() { @Override //第一个参数表示:父级路径对象 //第二个参数表示:子级路径字符串 //返回值:如果返回值为true,就表示当前路径留下,如果为false就表示当前路径不留下 //举例:获取D:\\aaa文件夹内所有的.txt文件 public boolean accept(File dir, String name) { File src=new File(dir,name); return src.isFile() && name.endsWith(".txt") } }); } }
3.5.3 其他
方法名 | 说明 |
---|---|
public static File[] listRoots() | 列出可以的文件系统跟(windows是盘符) |
四,代码举例
使用递归遍历文件夹查询指定内容
java
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;
public class text {
public static void main(String[] args) throws IOException {
String path="C:\\Users\\WDADWA\\Desktop\\learn_file\\新建文件夹";
File f=new File(path);
findAvi(f);
}
//查询指定内容
public static void findAvi(File src){
//1.进入文件夹src
File[] files=src.listFiles();
if(files != null){//判断是否为空,防止出现空指针异常。
//2.遍历数组依次得到src里面每一个文件夹
for (File file : files) {
//3.判断,如果是文件就可以执行题目的逻辑
if(file.isFile()){
String name = file.getName();
if(name.endsWith(".avi")){
System.out.println(name);
}
}else{
//4.判断,如果是文件夹,就递归
findAvi(file);
}
}
}
}
}
使用递归思想删除文件夹(包括有内容的文件夹)
java
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.io.IOException;
public class text {
public static void main(String[] args) throws IOException {
String path="C:\\Users\\WDADWA\\Desktop\\learn_file\\新建文件夹";
File f=new File(path);
deleteDirs(f);
}
public static void deleteDirs(File src){
File[] files=src.listFiles();
for (File file : files) {
if(file.isFile()){//如果是文件就直接删除
System.out.println(file.getName()+"删除成功!");
file.delete();
}else if(file.isDirectory()){//如果是文件夹就递归
deleteDirs(file);
}
}
//到这一步就只剩下空文件夹了,删除本身空文件夹即可
src.delete();
}
}