七,File类

一,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使用有参方法时

  1. 当填入参数:FileFilter filter

    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:\\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方法形参不一样。
            });
        }
    }
  2. 当填入参数:FilenameFilter filter

    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 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是一个函数式接口

    java 复制代码
    public 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();
    }
}
相关推荐
码小凡5 小时前
优雅!用了这两款插件,我成了整个公司代码写得最规范的码农
java·后端
星星电灯猴5 小时前
Charles抓包工具深度解析:如何高效调试HTTPHTTPS请求与API接口
后端
isfox5 小时前
Hadoop 版本进化论:从 1.0 到 2.0,架构革命全解析
大数据·后端
normaling6 小时前
四、go语言指针
后端
yeyong6 小时前
用springboot开发一个snmp采集程序,并最终生成拓扑图 (二)
后端
掉鱼的猫7 小时前
Solon AI 五步构建 RAG 服务:2025 最新 AI + 向量数据库实战
java·redis·后端
HyggeBest7 小时前
Mysql之undo log、redo log、binlog日志篇
后端·mysql
java金融7 小时前
FactoryBean 和BeanFactory的傻傻的总是分不清?
java·后端
独立开阀者_FwtCoder7 小时前
Nginx 部署负载均衡服务全解析
前端·javascript·后端