【Java】15 File 类

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());
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Demo_Null/article/details/105627096