迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 中的文件过滤器

作者:迹忆客 最近更新:2023/05/01 浏览次数:

本篇文章介绍如何在 Java 中使用 FileFilter。

FileFilter 用于过滤具有特定扩展名的文件。 Java内置包IO和Apache Commons IO为FileFilter提供了类和接口来进行文件过滤操作。


Java IO 包中的 FileFilter

FileFilter 是 Java IO 包中的一个类,用作给定路径的文件和子目录的过滤器。 FileFilter 类获取 File 对象并根据只读等属性过滤它们。

FileFilter 只有一个方法,accept(),用于检查指定的摘要是否应该包含在列表中。 以下是如何使用 accept() 方法的示例:

FileFilter Demo_Filefilter = new FileFilter() {
    public boolean accept(File Demo_File) {
        if (Demo_File.getName().endsWith(".txt")) {
            return true;
        }
        return false;
    }
};

现在使用 FileFilter 的最佳方法是将 FileFilter 传递给表示目录位置的 listfiles() 方法。

让我们尝试一个运行示例:

package jiyik;

import java.io.File;
import java.io.FileFilter;


public class Example  {
    public static void main(String[] args) {

        File File_Directory = new File("C:\\Users\\Sheeraz\\eclipse-workspace\\Demos");

        //check if the directory is valid directory
        if (!(File_Directory.exists() && File_Directory.isDirectory())) {
            System.out.println(String.format("This Directory does not exist", File_Directory));
            return;
        }

        FileFilter Demo_Filefilter = new FileFilter() {
            public boolean accept(File Demo_File) {
                if (Demo_File.getName().endsWith(".txt")) {
                    return true;
                }
                return false;
            }
        };

        File[] Text_Files = File_Directory.listFiles(Demo_Filefilter);

        for (File Demo_File: Text_Files) {
            System.out.println(Demo_File.getName());
        }
    }
}

上面的代码过滤扩展名为 .txt 的文件。

查看输出:

jiyik.txt

FileFilter 也可以使用 lambda 表达式来实现,其中语法更少且更容易。

参见示例:

package jiyik;

import java.io.File;
import java.io.FileFilter;


public class Example  {
    public static void main(String[] args) {

        File File_Directory = new File("C:\\Users\\Sheeraz\\eclipse-workspace\\Demos");

        //check if the directory is valid directory
        if (!(File_Directory.exists() && File_Directory.isDirectory())) {
            System.out.println(String.format("This Directory does not exist", File_Directory));
            return;
        }

        FileFilter Demo_FileFilter = (Demo_File) -> {
              return Demo_File.getName().endsWith(".txt");
        };

        File[] Text_Files = File_Directory.listFiles(Demo_FileFilter);

        for (File Demo_File: Text_Files) {
            System.out.println(Demo_File.getName());
        }
    }
}

上面的代码将以类似的方式工作,并返回扩展名为 .txt 的文件。

查看输出:

jiyik.txt

Java 中 Apache Commons IO 包中的 FileFilter

Apache Commons-IO 的 FileFilter 包用于执行不同的文件过滤操作,包括选择具有特定扩展名的文件、以特定字符开头或结尾的文件等。Apache Commons 的 FileFilter 包提供原始和布尔值 过滤器,这意味着一些过滤器将返回一个原始值和一些布尔值。

请参阅下表。

原始过滤器:

方法 说明
DirectoryFilter 它只接受目录。
PrefixFileFilter 它根据前缀进行过滤。
SuffixFileFilter 它根据后缀进行过滤。
NameFileFilter 用于根据文件名进行过滤。
WildcardFileFilter 用于根据通配符进行过滤。
AgeFileFilter 它根据文件的最后修改时间进行过滤。
SizeFileFilter 它根据文件大小进行过滤。

布尔过滤器:

方法 说明
TrueFileFilter 它将接受所有文件。
FalseFileFilter 它不会接受文件。
NotFileFilter 它将逻辑 NOT 应用于现有过滤器。
AndFileFilter 它将使用逻辑 AND 组合两个过滤器。
OrFileFilter 它将使用逻辑 OR 组合两个过滤器。

让我们尝试在示例中使用上述方法中的过滤器:

package jiyik;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.SuffixFileFilter;

public class Example {
    public static void main(String[] args) {
        try {
            Suffix_FileFilter();
        } catch(IOException iox) {
            System.out.println(iox.getMessage());
        }
    }
    public static void Suffix_FileFilter() throws IOException {
        // current directory
        File Current_Directory = new File(".");
        // all files and directories in the current directory
        String[] All_Files = Current_Directory.list();
        System.out.println("All files and directories :\n");
        for( int i = 0; i < All_Files.length; i++ ) {
            System.out.println(All_Files[i]);
        }
        System.out.println("\nThe Text Files: \n");
        String[] Text_Files = Current_Directory.list( new SuffixFileFilter("txt"));
        for( int i = 0; i < Text_Files.length; i++ ) {
            System.out.println(Text_Files[i]);
        }
    }
}

上面的代码使用 SuffixFileFilter 从给定目录中过滤文本文件。 它还列出了所提供文件夹的所有文件和子目录。

查看输出:

所有文件和目录:

.classpath
.gitignore
.project
bin
jiyik.fxml
jiyik.fxml.bak
jiyik.pdf
jiyik.png
jiyik.txt
jiyik.xml
jiyik.zip
DemoClassBytes.ser
employee.json
ExampleClassBytes.ser
Makefile
pom.xml
PythonFromJava.py
readme.md
src
student.json

The Text Files:

jiyik.txt

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Java 中获取文件大小

发布时间:2023/05/01 浏览次数:139 分类:Java

Java 提供了不同的方法来获取文件的字节大小。 本教程演示了在 Java 中获取文件大小的不同方法。使用 Java IO 的文件类获取文件大小 Java IO 包的 File 类提供了以字节为单位获取文件大小的功能。

Java 中的文件分隔符

发布时间:2023/05/01 浏览次数:108 分类:Java

本篇文章介绍了 Java 中的文件分隔符。Java 中的文件分隔符 文件分隔符是用来分隔目录的字符; 例如,Unix 使用 /,Windows 使用 \ 作为文件分隔符。

Java 获取 ISO 8601 格式的当前时间戳

发布时间:2023/05/01 浏览次数:132 分类:Java

本篇文章介绍了 ISO 8601 日期格式、其重要性及其在 Java 中的使用。 它还列出了一些优点来强调为什么应该使用 ISO 格式来表示日期。

在 Java 中获取数组的子集

发布时间:2023/05/01 浏览次数:142 分类:Java

本篇文章介绍了几种在 Java 中获取数组子集的方法。使用 Arrays.copyOf() 方法获取数组的子集 使用 Arrays.copyOfRange() 方法获取数组的子集

用 Java 填充二维数组

发布时间:2023/05/01 浏览次数:110 分类:Java

二维数组是基于表结构的,即行和列,填充二维数组不能通过简单的添加到数组操作来完成。 本篇文章介绍如何在 Java 中填充二维数组。

Java 中的自然排序

发布时间:2023/05/01 浏览次数:132 分类:Java

Java 中最常用的顺序是自然顺序。 本文将展示如何使用 naturalOrder() 函数对数组进行排序。

计算 Java 数组中的重复元素

发布时间:2023/05/01 浏览次数:202 分类:Java

本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。

Java 中 List 和 Arraylist 的区别

发布时间:2023/05/01 浏览次数:90 分类:Java

表示为单个单元的一组单个对象称为集合。 在 Java 中,Collection 是一个具有多个已定义接口和类的框架,用于将一组对象表示为一个单元。 它允许我们操纵

Java 中的 Vector 和 ArrayList

发布时间:2023/05/01 浏览次数:52 分类:Java

ArrayList 和 Vector 都实现了 List 接口,都可以作为内部数据结构的数组。 但是,尽管它们大部分相同,但它们也有不同之处。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便