Java I/O:文件处理与过滤器

1 绝对路径与相对路径

1.1 了解路径

  • 绝对路径:完整路径,如果是Windows,则以盘符开始。
  • 相对路径:指的是相对于当前项目根目录的路径。
    路径使用时,不区分大小写。由于路径是字符串,对于反斜杠需要进行转义,因此表示反斜杠通过“\‘表示。

1.2 路径分割符

在不同操作系统中,路径分隔符以及目录分割符是不一样的。

// 路径分隔符 windows:; linux::
System.out.println(File.pathSeparator);
// 目录分隔符 windows:\ linux:/
System.out.println(File.separator);

2 File类

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

2.1 构造器

通过给定的路径字符串转换为抽象路径名称,创建一个File对象。创建File对象,只是把路径封装到File对象中,并不会校验路径是否正确。路径可以是文件,也可以是目录;可以是相对路径,也可以是绝对路径。

  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

2.2 获取功能的方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。
  • public String getPath() :将此File转换为路径名字符串。
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。

2.3 判断功能的方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。

2.4 创建删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • public boolean delete() :删除由此File表示的文件或目录。
  • public boolean mkdir() :创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

2.5 目录的遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

3 案例:递归打印目录下所有文件路径名

不采用过滤器

public static void printDir(File dir) {
    File[] files = dir.listFiles();
    if (files != null) {
        for (File file : files) {
            if (file.isFile()) {
                if (file.getName().endsWith(".java")) {
                    System.out.println(file.getAbsolutePath());
                }
            } else {
                printDir(file);
            }
        }
    }
}

使用过滤器

使用过滤器对当前路径下文件进行筛选,在遍历过程中,省掉一层if判断。

public static void printDirFilter(File dir) {
    File[] files = dir.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.getName().endsWith(".java") || pathname.isDirectory();
        }
    });
    if (files != null) {
        for (File file : files) {
            if (file.isFile()) {
                System.out.println(file.getAbsolutePath());
            } else {
                printDirFilter(file);
            }
        }
    }
}

使用lambda表达式

由于FileFilter接口,仅有一个接口,比较方便使用lambda表达式,得到更加简洁的代码。

File[] files = dir.listFiles(file ->
        file.getName().endsWith(".java") || file.isDirectory()
);
发布了72 篇原创文章 · 获赞 110 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/LIZHONGPING00/article/details/103337754