JavaSE🔟文件(File)

发布时间 2023-03-25 16:45:33作者: Jaywee

File:用于代表磁盘中的一个文件或文件夹(未必真实存在),

提供操作文件本身的方法。

1、常用属性

  1. 路径分隔符;

    • pathSeparator
    • ``pathSeparatorChar`
  2. 名称分隔符\

    • Separator
    • SeparatorChar
  3. 抽象路径path,即创建文件时指定的路径.

    // 抽象路径为myFile.txt
    File file1 = new File("myFile.txt");
    // 抽象路径为F:\myFile.txt
    File file2 = new File("F:\\myFile.txt");
    

2、常用方法

2.1、创建、删除

Hint:创建的 File 实例仅在中存在,磁盘中未必真实存在对应的文件。

  1. 创建文件createNewFile(),当指定路径的文件不存在时创建。
  2. 创建文件夹
    • mkdir():单级目录
    • mkdirs():级联创建多级目录
  3. 删除文件(目录):若为多级目录则只删除最内层目录,当目录为空时才删除。
    • delete():直接删除
    • deleteOnExit:虚拟机终止时删除

2.2、文件信息

  1. 路径
    • getPath():抽象路径
    • getAbsolutePath:绝对路径
  2. 目录
    • getName():文件(目录)名
    • getParent():文件所在目录(父级目录)
  3. 其它
    • getLenth():文件长度
    • lastModified():文件最后修改时间

2.3、判断

  1. 类型
    • isFile():是否为文件
    • isDirectory:是否为目录
  2. 存在性exists()
  3. 隐藏性isHidden()

3、目录操作

3.1、列出内容

3.1.1、所有内容

相关方法

list() listFiles()
含义 列出目录中所有文件和子目录的文件名 列出目录中所有文件和子目录的 File 对象
返回值 字符串数组 文件数组

3.1.2、文件过滤器

自定义文件筛选规则

  1. FileNameFilter(Java 1.0)

    • dir:使用该过滤器的目录对象
    • name:目录中的文件名(目录名)
  2. FileFilter(Java 1.0)

    • pathname:文件夹中的文件(目录)

      @FunctionalInterface
      public interface FilenameFilter {
          boolean accept(File dir, String name);
      }
      
      @FunctionalInterface
      public interface FileFilter {
          boolean accept(File c);
      }
      

示例:列出 dir 目录中的 .jpg 后缀文件名。

File dir = new File("目录路径");

// lambda表达式
File[] files = dir.listFiles((pathName) -> pathName.getName().endsWith(".jpg"));

for (File file : files) {
    System.out.println(file);
}

3.2、递归

多叉树的遍历

  1. 判断是文件夹则递归调用。
  2. 否则执行相应操作。

3.2.1、递归遍历

public void recursiveList(File dir) {
    // 当前目录路径
    System.out.println(dir.getAbsoluteFile());

    File[] files = dir.listFiles();

    if (files != null && files.length > 0) {
        // 遍历
        for (File file : files) {
            if (file.isDirectory()) {
                recursiveList(file);	// 递归
            } else {
                System.out.println(file.getAbsolutePath());
            }
        }
    }
}

3.2.2、递归删除

后序遍历

  1. 递归删除子文件夹内容
  2. 删除子文件夹本身
public void recursiveDelete(File dir) {
    // 当前目录路径
    System.out.println("===== " + dir.getAbsoluteFile() + " =====");

    File[] files = dir.listFiles();

    if (files != null && files.length > 0) {
        // 遍历
        for (File file : files) {
            if (file.isDirectory()) {
                recursiveDelete(file);	// 递归
                
                file.delete();	// 后序位置:删除子文件夹本身
            } else {
                System.out.println(file.getAbsolutePath() + " was deleted? " + file.delete());
            }
        }
    }
}