java基础---->FilenameFilter之文件过滤
2023-09-27 14:20:11 时间
FilenameFilter用于对列表中文件名的过滤,今天我们就开始java中FilenameFilter的学习。好多年了,你一直在我的伤口中幽居,我放下过天地,却从未放下过你,我生命中的千山万水,任你一一告别。
java中FilenameFilter的使用
java文档对FilenameFilter的描述:
Instances of classes that implement this interface are used to filter filenames. These instances are used to filter directory listings in the list method of class File, and by the Abstract Window Toolkit's file dialog component.
我们通过一个案例,来加深对FilenameFilter的了解与使用,项目结构如下:
一、 定义一个实现FilenameFilter的类,用于对文件名的过滤
package com.huhx.file;
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
/**
* @author huhx
*/
public class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}
二、 在DirList.java类中测试使用
package com.huhx.file;
import java.io.File;
import java.util.Arrays;
/**
* @author huhx
*/
public class DirList {
public static void main(String[] args) {
File filePath = new File("file");
String[] list = filePath.list(new DirFilter("E.*\\.java"));
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String dirName : list) {
System.out.println(dirName);
}
}
}
三、 得到结果如下:
EscapingDNs.java
External.java
FilenameFilter的分析
一、 我们看一下File类的list(FilenameFilter filter)方法,代码如下:
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
List<String> v = new ArrayList<>();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return v.toArray(new String[v.size()]);
}
调用list()方法得到文件夹下的所有文件名,然后遍历所有的文件名。通过FilenameFilter的accept方法进行过滤,将符合要求的文件名加入到列表中,最后返回
二、 File中有一个类似的方法listFiles(FileFilter filter)方法,我们看下代码:
public File[] listFiles(FilenameFilter filter) {
String ss[] = list();
if (ss == null) return null;
ArrayList<File> files = new ArrayList<>();
for (String s : ss)
if ((filter == null) || filter.accept(this, s))
files.add(new File(s, this));
return files.toArray(new File[files.size()]);
}
与上述的list方法很类似,只是返回的类型不一样。
相关文章
- 在cmd下编译Java源文件文件出现程序包xxxx不存在
- Ubuntu 和 Raspbian 如何设置 Java Home
- java编解码技术,netty nio
- java文件下载
- Java 陷阱:慎用入参做返回值!!
- 拥抱 Java 8 并行流吧,速度飞起!
- Java成神之路技术整理(长期更新)
- java 学习网站
- Java:SpringBoot @Async实现异步任务
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.5 版本管理
- 【Java】JavaWeb文件上传和下载
- Java中文件与字节数组转换
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- Java Predicate<T>和Function<T, R>使用示例代码及区别
- Java DocumentBuilderFactory(javax.xml)通过XPath解析xml文件
- java复制文件的4种方式
- java将二维数组转为稀疏数组保存到本地并读取本地文件转为二维数组
- 记录linux运行服务提示报错/bin/java: 没有那个文件或目录
- 剑指offer【07】- 斐波那契数列(java)