Java 中的文件过滤器
本篇文章介绍如何在 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
相关文章
在 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 浏览次数: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 接口,都可以作为内部数据结构的数组。 但是,尽管它们大部分相同,但它们也有不同之处。