【Java】15 File 类

本文深入讲解Java中的File类,涵盖其构造方法、路径处理、常用API及实例代码,如遍历文件夹、递归创建与删除目录、查找特定文件等,帮助读者掌握文件和目录操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

1.1 创建 File 类

1.1.1 构造方法

public File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File 实例。
public File(String parent, String child):从父路径名字符串和子路径名字符串创建新的 File 实例。
public File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File 实例。

1.1.2 路径

相对路径:相对于当前文件所在路径,一般为项目根目录。
绝对路径:从盘符开始的路径,这是一个完整的路径。

tips1: 一个 File 对象代表硬盘中实际存在的一个文件或者目录,无论该路径下是否存在文件或者目录,都不影响 File 对象的创建。
tips2: Windows 与 Linux 的路径分隔符不一致( Windows是 \ ,Linux 是 / ),使用 File.separatorChar 可以拿到当前系统下的路径分隔符。


1.2 常用方法

方法名说明
String getAbsolutePath( )返回此 File 的绝对路径名字符串
String getPath( )将此 File 转换为路径名字符串
String getName( )返回由此 File 表示的文件或目录的名称
long length( )返回由此 File 表示的文件的长度
boolean exists( )此 File 表示的文件或目录是否实际存在
boolean isDirectory( )此 File 表示的是否为目录
boolean isFile( )此 File 表示的是否为文件
boolean createNewFile( )当且仅当具有该名称的文件尚不存在时,创建一个新的空文件
boolean delete( )删除由此 File 表示的文件或目录
boolean mkdir( )创建由此 File 表示的目录
boolean mkdirs( )创建由此 File 表示的目录,包括任何必需但不存在的父目录
String[ ] list( )返回一个 String 数组,表示该 File 目录中的所有子文件或目录
File[ ] listFiles( )返回一个 File 数组,表示该 File 目录中的所有的子文件或目录

1.3 示例

1.3.1 遍历文件夹

public class DemoRecursion {
    public static void main(String[] args) {
        //创建文件对象
        File file = new File("E:\\");
        recurstion(file);
    }
    public static void recurstion(File file) {
        //合法性判断
        if (file == null) {
            return;
        }
 
        //获取文件夹下所有的子文件或者文件夹
        File[] files = file.listFiles();
        
        //可能因为权限等问题无法获取文件夹内的文件
        if (files == null) {
            return;
        }
 
        //遍历文件数组
        for (File file1 : files) {
            if (file1.isDirectory()) {
                //是文件夹则打印文件夹路径并递归
                System.out.println(file1.getPath());
                recurstion(file1);
            } else {
                //否则打印文件路径加文件长度
                System.out.println(file1.getPath() + "\t大小是:" + ((float)file1.length() / 1024 / 1024) + "M");
            }
        }
    }
}

1.3.2 递归创建目录

public class DemoCreateFile {
    public static void main(String[] args) {
        //指定文件路径
        File file = new File("D:\\WorkSpace");
        //传递一个递归结束条件
        int i = 0;
        //调用方法
        recursion(file,i);
    }
 
    public static void recursion(File file,int i) {
        //递归结束条件
        if (i > 100) return ; 
        
        //指定创建的文件夹
        File f = new File(file,"new");
 
        //创建文件夹
        f.mkdirs();
 
        //递归调用
        recursion(f,i);
    }
}

1.3.3 递归删除

public class DemoDeleteFile {
    public static void main(String[] args) {
        //指定路径
        File file = new File("D:\\WorkSpace\\new");
 
        delete(file);
    }
 
    private static void delete(File file) {
        //判断是否存在
        if (file.exists()) {
            //判断是否是文件夹
            if (file.isDirectory()) {
                //获取文件夹内所有的文件和文件夹
                File[] files = file.listFiles();
                if (files.length > 0) {
                    //若数组长度大于0则该文件夹内有内容
                    for (File file1 : files) {
                        //遍历数组,递归文件夹
                        delete(file1);
                    }
                }
                //删除文件夹
                file.delete();
            } else {
                //不是文件夹则直接删除文件
                file.delete();
            }
        }
 
    }
}

1.3.4 查找文件

public class DemoRecursion {
    static boolean b = false;
    public static void main(String[] args) {
        //创建文件对象
        File file = new File("E:\\");
 
        //键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要查找的文件");
        String s = sc.next();
 
        recurstion(file,s);
        
        if (!b) {
            System.out.println("没有找到文件");
        }
    }
    
    public static void recurstion(File file,String s) {
        //合法性判断
        if (file == null) {
            return;
        }
 
        //使用过滤器获取文件夹下所有的子文件或者文件夹
        File[] files = file.listFiles(new FileFilter() {
 
            @Override
            public boolean accept(File pathname) {
                //判断是否为文件夹或者是包含查找字符串的文件名
                return file.isDirectory() || file.getName().contains(s);
            }
        });
        
        //遍历数组
        for (File file1 : files) {
            if (file1.isDirectory()) {
                //是文件夹则并递归
                recurstion(file1,s);
            } else {
                //设置找到了文件
                b = true;
                //打印文件路径
                System.out.println(file1.getPath());
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值