深度解析Java中的File类

File类



一、是什么?

1.引述:

​ 存储在程序中的数据是暂时的,当程序在终止时它们就会丢失。为了能够永久地保存程序中创建的数据,需要将他们存储带磁盘或其他永久存储设备的文件中。这样,这些文件其后就可以被其他程序传送和读取。由于数据存储在文件中,使用本篇博文就介绍如何使用File类创建、重命名、删除文件\文件夹,以及获取文件\文件夹的属性。

  1. Java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。File类是一个与操作系统无关的类,任何的操作系统都可以使用这个类中的成员方法。
    我们可以使用File类进行以下操作:

    创建文件/文件夹
    删除文件/文件夹
    获取文件/文件夹
    判断文件/文件夹是否存在
    对文件夹进行遍历
    获取文件的大小

二、为什么?

  1. File类的三个构造方法:

1.1 File(String pathname)

为一个指定的路径名创建一个File对象。路径名可能是一个目录或者一个文件。

1.2 File(String parent, String child)

在目录parent下创建一个子路径的File对象,子路径可能是一个目录或者一个文件。

1.3 File(File parent, String child)

在目录parent下创建一个子路径的File对象。parent是一个File对象。之前的构造方法中,parent是一个字符串。

 // 构造方法File(String pathname)
File file1 = new File("c:\\txt\\aaa.txt");
File file2 = new File("bbb.txt");

// 构造方法File(String parent,String child)
File file3 = new File("c:\\txt\\","aaa.txt");

// 构造方法public File(File parent, String child)
File parentFile = new File("c:\\txt\\");
File file4= new File(parentFile,"aaa.txt");

  1. 创建文件的方法

2.1 public boolean createNewFile()

在操作系统上物理创建文件

// 先创建File对象
File file = new File("c:\\txt\\","a.txt")
// 创建文件
boolean = file.createNewFile();
  1. 创建目录的方法

3.1 public boolean mkdir()

当目标目录的父目录不存在的时候,mkdir()会创建目标目录失败

// 先创建File对象
File file = new File("c:\\txt\\","a.txt")
// 创建文件目录
boolean = file.mkdir();

3.2 public boolean mkdirs()

当目标目录的父目录不存在的时候,mkdirs(),会连同目标目录和不存在的父目录,一起创建出来

// 先创建File对象
File file = new File("c:\\txt\\","a.txt")
// 创建文件目录
boolean b = file.mkdirs();
  1. 重命名文件\文件夹的方法:

public boolean renameTo(File dest)

如果是目标文件对象和当前文件对象,在同一目录下,实现的效果就是重命名
如果是目标文件对象和当前文件对象,不在同一目录下,除了重命名,还有文件移动效果

// 将"c:\\txt\\a.txt"路径下的a.txt文件重命名为b.java
File file = new File("c:\\txt\\a.txt");
boolean b = file.renameTo(new File("c:\\txt\\b.java"))
  1. 删除文件\文件夹的方法

public boolean delete()

删除文件或目录, 如果此路径名表示一个目录,则该目录必须为空才能删除

// 删除"c:\\txt"路径下的b.java文件
File file = new File("c:\\txt\\b.java");
boolean = file.delete();

// 先创建一个空目录,再删除
File file1 = new File("c:\\txt\\dir");
boolean b = file1.mkdir();
boolean b1 = file1.delete();
  1. 判断功能
6.1 public boolean isFile()

判断当前File对象是否表示文件,返回boolean值
6.2 public boolean isDirectory() 

判断当前File对象是否表示目录,返回boolean值
6.3 public boolean exists()

物理判断File对象表示的文件或目录是否真的存在,返回boolean值
6.4 public boolean exists()

物理判断File对象表示的文件或目录是否真的存在,返回boolean值
6.5 public boolean canRead()

判断文件是否可读,返回boolean值
6.6 public boolean canWrite()

判断文件是否可写,返回boolean值
6.7 public boolean isHidden() 

判断文件是否隐藏文件,返回boolean值
6.8 public File getAbsoluteFile() 
 
获取文件的绝对路径字符串,返回boolean值
  1. 获取功能

7.1 普通获取功能

7.1.1 public File getAbsoluteFile()

获取文件的绝对路径字符串

7.1.2public String getPath()

获取文件的路径字符串

7.2.3 public String getName()

获取文件的文件名

7.2.4 public long length()

返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。大小单位为字节

7.2.5 public long lastModified()

表示文件最后一次被修改的时间的 long 值,用与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数表示

7.2 高级获取功能
7.2.1 public String[] list()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。如果此抽象路径名不表示一个目录,那么此方法将返回 null

7.2.2 public File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件如果此抽象路径名不表示一个目录,那么此方法将返回 null

7.2.3自定义获取功能
自定义在哪里呢? 就是我们可以自己指定,所要查找的文件,需要满足的过滤条件list或listFiles方法的参数,它们都是用来表示,你定义的过滤条件的File[] listFiles(FileFilter filter)表示过滤条件的接口 public interface FileFilter

三、怎么办?

例题:递归删除目录

目录结构为如下(尽量不要在c盘中测试哈)
firstLevel目录中,包含一个secondLevel目录和a1.txt和b1.java文件
secondLevel目录中包含dir1和dir2两个目录,和a2.txt和b2.java文件
dir1目录中包含a3.txt和b3.java文件
dir2目录是一个空目录

要求删除firstLevel目录

public static void delete(File dir) {
    
    // 获取当前目录下的所有文件或目录的Flie文件
    File[] files = dir.listFiles();
    
    if (files == null || files.length() == 0) {
        // 当dir不是目录(即文件)或者dir是空目录
        dir.delete();
        return;
    }
    
    for (int i = 0; i < files.length; i++) {
        // 递归删除当前dir目录下的所有文件或目录
        if (files[i].isDirectory()) {
            // 如果File对象表示的是目录,则递归删除子目录
            delete(files[i]);
        } else {
            // 如果File对象表示的是文件,则直接删除
            files.delete();
        }
    }
   // 递归删除完当前dir中的子文件或子目录后,当前目录为空了,可直接删除
    dir.delete();
}

posted on 2020-06-25 21:15  lifelicanpeng  阅读(329)  评论(0编辑  收藏  举报

导航