JavaIO流:File类

一、File类概述

File类是java.io包中唯一代表磁盘文件本身的对象。 以抽象的方式代表文件名和目录路径名。

可以通过File类中的方法来操作文件,如新建、删除、重命名文件和目录等。

File 类不能访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。

File对象可以作为参数传递给流的构造器,指明读取或写入的"终点"。

File类实现了Compareable和Serializable接口,可以比较或者实现序列化。

在这里插入图片描述

二、File类方法

2.1File类的构造方法

构造方法说明
File(String pathname)如果 pathname是实际存在的路径,则该 File 对象表示的是目录;如果 pathname是文件名,则该 File 对象表示的是文件。
File(String parent, String child)parent为父路径,child为子路径创建File对象。
File(File parent, String name)dir 是路径对象,name 是文件名。
File(URI uri) 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。
    @Test
    public void fileConstructTest() throws URISyntaxException {
        //构造器1`File(String pathname)`
        File file1 = new File("hello1.txt");
        File file4 = new File("E:\\java"+File.separator+"hello1.txt");
        //构造器2 File(String parent, String child)`
        File file2 = new File("E:\\java","hello2.txt");
        //构造器3 File(File parent, String name)`
        File file3 = new File(file2, "hello3.txt");

        System.out.println(file1);//hello1.txt
        System.out.println(file4);//E:\java\hello1.txt
        System.out.println(file2);//E:\java\hello2.txt
        System.out.println(file3);//E:\java\hello2.txt\hello3.txt
    }

2.2File类的静态成员变量

静态成员变量描述
public static String pathSeparator系统中多个路径的分隔符 windows下是:;
public static String separator系统中一个路径中多个名称之间的分隔符号 windows下是:\
File file4 = new File("E:\\java"+File.separator+"hello1.txt");

2.3File的常用方法

使用任意一个构造方法都可以创建一个 File 对象,然后调用其提供的方法对文件进行操作。

判断方法说明
boolean canRead()判断是否可读的文件
boolean canWrite()判断是否可写的文件
boolean isDirectory()判断当前 File 对象表示的文件是否为一个路径(目录)
boolean isFile()判断当前 File 对象表示的文件是否为一个“普通”文件
boolean exists()判断当前 File 是否存在
boolean isHidden()判断是否隐藏
boolean isAbsolute()判断当前 File 对象表示的文件是否为一个绝对路径名。该方法消除了不同平台的差异,可以直接判断 file 对象是否为绝对路径。在 UNIX/Linux/BSD 等系统上,如果路径名开头是一条斜线/,则表明该 File 对象对应一个绝对路径;在 Windows 等系统上,如果路径开头是盘符,则说明它是一个绝对路径。
获取方法说明
String getAbsolutePath()返回由该对象表示的文件的绝对路径名
String getName()返回表示当前对象的文件名或路径名(如果是路径,则返回最后一级子路径名)
String getParent()返回当前 File 对象所对应目录(最后一级子目录)的父目录名
long lastModified()返回当前 File 对象表示的文件最后修改的时间
long length()返回当前 File 对象表示的文件长度
String[] list()返回当前 File 对象指定的路径文件列表
String[] list(FilenameFilter)返回当前 File 对象指定的目录中满足指定过滤器的文件列表
删除方法说明
boolean delete()删除当前对象指定的文件
创建方法说明
public boolean createNewFile()创建文件。若文件存在,则不创建,返回false
boolean mkdir()创建一级目录,它的路径名由当前 File 对象指定
boolean mkdirs()创建多级目录,它的路径名由当前 File 对象指定
重命名方法说明
boolean renameTo(File)将当前 File 对象指定的文件更名为给定参数 File 指定的路径名

三、File类的使用案例

3.1递归搜索文件

根据文件名称进行搜索。

@Test  
public void findByNameTest(){
    String filePath = "E:"+File.separator+"java";
    String fileName = "File类";

    File file = new File(filePath);
    String fi = findByName(file, fileName);
    System.out.println(fi);
}

public static String findByName(File file,String fileName){
    File[] files = file.listFiles();
    //没有文件则返回
    if (files == null || files.length == 0) {
        return "目录无文件或目录名不存在!";
    }
    for (File f : files) {
        if (f.isDirectory()){
            //递归查找
            findByName(f,fileName);
        }else {
            String name = f.getName();
            if (name.contains(fileName)){
                return f.getAbsolutePath();
            }
        }
    }
    return "当前目录下找不到目标文件!";
}

可以在此基本上进行扩展,例如文件的复制、移动、删除、求大小等操作。

3.2统计文件夹大小

@Test
public void calculateDirSizeTest(){
    String filePath = "E:"+File.separator+"java";
    String fileName = "File类";

    File file = new File(filePath);
    long size = calculateDirSize(file);
    System.out.println("文件夹大小:"+size + "字节");
}

public static long calculateDirSize(File srcDir) {
    long size = 0;
    File[] files = srcDir.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            size += calculateDirSize(file);
        } else {
            size += file.length();
        }
    }
    return size;
}

3.3文件过滤器

要从列表中排除扩展名为.SYS的所有文件,我们可以使用由功能接口FileFilter的实例表示的文件过滤器来实现。

它包含一个accept()方法,它将File作为参数列出,如果应该列出文件,则返回true。返回false不会列出文件。

FileFilter filter = file ->  {
    if (file.isFile()) {
        String fileName   = file.getName().toLowerCase();
        if (fileName.endsWith(".sys"))  {
            return false;
        }
    }
    return true;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值