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/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,