文件操作 之 File

本文详细介绍了Java中的File类,包括其构造方法、文件和目录的创建与删除、属性判断等功能。通过示例代码展示了如何使用File类进行文件操作,如创建新文件、创建目录、删除文件和目录。此外,还讲解了File类的判断方法,如判断文件是否存在、是否为目录、是否可读写等。最后,讨论了FileFilter接口在文件过滤中的应用,演示了如何自定义过滤规则来获取特定类型的文件。
摘要由CSDN通过智能技术生成

File类 简介

        在java中,File类是java.io包中唯一代表磁盘(文件系统) 文件本身的对象(实际上表示的是一个抽象路径) 。File类定义了一些与平台无关的方法来操作文件,File类主要是用来获取或是处理与磁盘文件相关的信息。
        File 类表示处理文件和文件系统的相关信息。也就是说,File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。

  • 使用File可以做到:
    1. 访问其表示的文件或文件夹的属性信息  例如:文件名、 文件大小、文件路径、访问权限和修改日期等...
    2. 创建和删除文件或文件夹
    3. 访问 \ 浏览一个文件夹的子项

File类的相关方法

1、构造方法

  • File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File实例
  • File(String parent, String child) 根据指定的父路径和文件路径创建一个新File对象实例。
  • File(File parent, String child) 根据指定的父路径对象和文件路径创建一个新的 File 对象实例。

代码实现过程:

package test;
import java.io.File;
public class Test {
    public static void main(String[] args) {
        /*
        实际开发中我们不会使用绝对路径。虽然清晰明了,但是不利于跨平台。
        相对路径有更好的跨平台性,但是具体位置要看程序运行环境而定。
        例如:
        "./":当前目录,对于IDEA而言,该目录是当前程序所在的项目目录。
         */
        //File(String pathname)  将指定路径名转换成一个File对象
        File file = new File("./demo.txt");
        System.out.println(file);
        //File(String parent,String child) 根据指定的父路径和文件路径创建File对象
        File file1 =  new File("./","demo1.txt");
        System.out.println(file1);
        //File(File parent,String child) 根据指定的父路径对象和文件路径创建File对象
        File parent = new File("./");
        File file2 = new File(parent, "demo2.txt");
        System.out.println(file2);
        File file3 = new File(new File("./"),"demo3.txt");
        System.out.println(file3);
    }
}

运行结果:

2、File类创建删除功能

  • boolean createNewFile();  指定路径不存在该文件时创建文件  返回true  否则false
  • boolean mkdir();  当指定的文件夹不存在时创建当前文件夹  返回true  否则false
  • boolean mkdirs();  会一同将不存在的父目录全部创建出来  返回true  否则false
  • boolean delete();  删除文件或为空的目录,当目录非空时无法删除  返回true  否则false
    package file;
    import java.io.File;
    import java.io.IOException;
    /**
     * 使用File创建一个新文件
     * boolean createNewFile();指定路径不存在该文件时创建文件  返回true  否则false
     * create:创建
     * New:新的
     * File:文件
     */
    public class CreateNewFileDemo {
        public static void main(String[] args) throws IOException {
            //在当前目录下新建一个文件:test.txt
            File file = new File("./test.txt");
            //boolean exists()判断当前File表示的位置是否已经实际存在该文件或目录
            if(!file.exists()){
                file.createNewFile();//将File表示的文件创建出来
            }
        }
    }
    package file;
    import java.io.File;
    /**
     * 使用File创建目录
     * boolean mkdir();  当指定的文件夹不存在时创建当前文件夹  返回true  否则false
     */
    public class MkDirDemo {
        public static void main(String[] args) {
            //在当前目录下新建一个目录:demo
            File dir = new File("a/demo");
            if(!dir.exists()){
                dir.mkdir();//创建File表示的目录时要求所在的目录(a目录)必须存在
            }
        }
    }
    package file;
    import java.io.File;
    /**
     * 使用File创建应该目录
     * boolean mkdirs();  会一同将不存在的父目录全部创建出来  返回true  否则false
     */
    public class MkDirsDemo {
        public static void main(String[] args) {
            //在当前目录下新建一个目录:a/b/c/d/e/f/demo
            File file = new File("a/b/c/d/e/f/demo");
            if (!file.exists()){
                file.mkdirs();//会一同将不存在的父目录全部创建出来
            }
        }
    }
    direction:目录
    make:制造
    注:mkdir是linux中的一条命令。就是make direcory的简写,意思是创建目录
    package file;
    import java.io.File;
    /**
     * 删除一个文件夹\文件
     * boolean delete();  删除文件或者删除单级文件夹(只能删除空目录)
     */
    public class DeleteDemo {
        public static void main(String[] args) {
            File file = new File("./demo");
            if (file.exists()){
                file.delete();//将该文件夹\文件删除
            }
        }
    }

2、File类判断功能

  • boolean exists();  判断文件或目录是否存在。
  • boolean isDirectory();  判断是否是目录。
  • boolean isFile();  判断是否是文件。
  • boolean isHidden();  判断是否是一个隐藏文件。
  • boolean isAbsolute();  判断当前路径是否是绝对路径。
    package file;
    import java.io.File;
    import java.io.IOException;
    
    /**
     * File类判断功能
     */
    public class FileDemo{
        public static void main(String[] args) throws IOException {
            method1();//判断文件或文件夹是否存在
            method2();//判断是否是目录  判断是否是文件
            method3();//判断是否是一个隐藏文件
            method4();//判断当前路径是否是绝对路径
        }
        //exists();判断文件或文件夹是否存在
        public static void method1() throws IOException {
            File file = new File("a.txt");
            file.createNewFile();
            boolean flag = file.exists();
            System.out.println("exists():"+flag);
        }
        //isDirectory();判断是否是目录   isFile();判断是否是文件。
        public static void method2() throws IOException{
            File file = new File("./b.txt");//在当前项目中没有创建该文件
            File file1 = new File("./c");//提示:在当前项目中没有创建该文件夹
            file1.mkdir();
            boolean flag = file.isDirectory();
            boolean flag2 = file1.isFile();
            System.out.println("isDirectory():"+flag);
            System.out.println("isFile():"+flag2);
        }
        //isHidden();判断是否是一个隐藏文件
        public static void method3() throws IOException{
            File file =  new File("a.txt");
            System.out.println("isHidden():"+file.isHidden());
        }
        //isAbsolute();判断当前路径是否是绝对路径
        public static void method4() throws IOException{
    //        File file = new File("./a1.txt");//相对路径
            File file = new File("D:\\a\\demo.txt");//绝对路径
            boolean flag = file.isAbsolute();
            System.out.println("isAbsolute():"+flag);
        }
    }
    

3、File中的常用方法:

  • String getName();  获取文件或目录(文件夹)的名称。
  • long length();  获取当前文件大小(长度)。
  • long lastModified() 以毫秒值返回最后修改时间。
  • boolean renameTo();  将当前File对象所指向的路径修改为指定File所指向的路径(重命名)。
  • boolean canRead();  判断文件或目录是否可读。
  • boolean canWrite();  判断文件或目录是否可写。
  • String Path();  获取文件或目录的路径。
  • String getParent();  获取当前文件或目录的父级文件的路径,以字符串的形式返回该父级路径,没有则返回null。
  • String getparentFile();  获取文件或目录的父级文件,如果给定的抽象路径没有父目录,则返回null。
  • Strin[] list();  获取目录中的文件及目录,返回名称数组。
  • File[] listFiles();  获取目录中的文件及目录,返回文件数组(以File对象的形式)。
  • Static File[] listRoots() 获取计算机中的所有盘符

4、FileFilter文件过滤器

java.io.FileFilter接口:用于抽象路径(File对象)的过滤器
作用:
        用于过滤File文件名
FileFilter接口里唯一的抽象方法:boolean accept(File pathname) :测试 pathname(指定的抽象路径名) 是否应该包含在路径名列表中。
参数:
        使用ListFiles方法遍历目录后 得到的每一个文件对象(pathname - 要测试的抽象路径名)

注:这两个过滤器接口没有实现类
须自己写实现类 然后重写过滤的方法(accept()) 在方法中自己定义过滤的规则

        1、listFiles()方法会对构造方法中传递的目录进行遍历
              并获取目录中的每一个文件或文件夹 然后封装成File对象
        2、listFiles()方法会调用传递进来的过滤器中的accept()方法
        3、listFiles()方法会将遍历得到的每一个File对象传递给accept()方法的pathname参数
accept()方法返回的是一个布尔值:
        true:将传递过去的File对象保存到File数组中(放行)
        false:不将传递过去的File对象保存到File数组中

定义一个类实现FileFilter接口的方式:

package demo;
import java.io.File;
import java.io.FileFilter;
/**
 * 重载的listFiles方法,允许我们传入一个文件过滤器从而可以有条件的获取一个目录
 * 中的子项。
 */
public class Test {
    public static void main(String[] args) {
        /* 需求:获取当前目录中所有名字以"."开始的子项 */
        File file = new File("./");
        File[] files = file.listFiles(new FileFilterImpl());
        for (File file2 : files) {
            System.out.println(file2);
        }
    }
}
class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File f) {
        String name = f.getName();
                    boolean starts = name.startsWith(".");//名字是否以"."开始
                    System.out.println("过滤器过滤:"+name+",是否符合要求:"+starts);
                    return starts;
    }
}

匿名内部类的方式:

package demo;
import java.io.File;
import java.io.FileFilter;
public class Test {
    public static void main(String[] args) {
        File file = new File("./");
        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                String name = pathname.getName();
                boolean starts  = name.startsWith(".");//判断名字是否以"."开始
                System.out.println("过滤器过滤:"+name+",是否符合要求:"+starts );
                return starts ;
//                return pathname.getName().startsWith(".");//判断名字是否以"."开始
            }
        });
    }
}

Lambda表达式:

package demo;
import java.io.File;
import java.io.FileFilter;
/**
 * JDK8之后java支持了lambda表达式这个特性
 * lambda表达式可以用更精简的语法创建匿名内部类,但是实现的接口只能有一个抽象
 * 方法,否则无法使用。
 * lambda表达式是编译器认可的,最终会被改为内部类形式编译到class文件中。
 *
 * 语法:
 * (参数列表)->{
 *     方法体
 * }
 */
public class Test {
    public static void main(String[] args) {
        File file = new File("./");
        //匿名内部类形式创建FileFilter
        FileFilter filter = new FileFilter() {
            public boolean accept(File file) {
                return file.getName().contains(".");
            }
        };
        //lambda表达式写法(就是省去了接口名和方法名)
        FileFilter filter1 = (File f)->{
            return f.getName().contains(".");
        };

        //参数类型可以忽略不写,如果只有一个参数时,参数列表的"()"可以忽略不写
        FileFilter filter2 = f->{
            return f.getName().contains(".");
        };

        //当方法体中只含有一句话时,方法体的"{}"可以忽略,并且如果含有return时要一同忽略
        FileFilter filter3 = f->f.getName().contains(".");
        //遍历
        File[] files = file.listFiles(filter);
        for (File f : files
             ) {
            System.out.println("过滤器过滤:"+f.getName()+",是符合要求");
        }
    }
}

递归删除子文件:

​package demo;
import java.io.File;
/**
 * 递归删除子文件
 */
public class Test {
    public static void main(String[] args) {
        deleteFile("./a");
    }
    public static void deleteFile(String path) {
        File file = new File(path);
        if (file.exists()) {
            if (file.isDirectory()) {
                File[] temp = file.listFiles(); //获取该文件夹下的所有文件
                for (File value : temp) {
                    deleteFile(value.getAbsolutePath());
                }
            } else {
                file.delete(); //删除子文件
            }
            file.delete(); //删除文件夹
        }
    }
}

​

​


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值