IO流--文件和文件夹的过滤(三种方法)

本文介绍了Java中对文件过滤的三种方法:1)使用if判断过滤法,通过遍历目录获取特定文件;2)通过实现FilenameFilter接口的listFiles()方法进行过滤;3)优化后的FilenameFilter接口实现,便于多次过滤操作。此外,还简要提及了文件夹过滤的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、文件的过滤

文件的过滤就是获得当前目录下的某一个子目录或子文件。方法有以下三种:

1、if判断过滤法

思路:(1)将目录放在一个数组中(File.listFiles)
(2)对元素进行遍历(增强for循环)
(3)判断筛选(if判断)。

public static void main(String[] args) throws Exception {
		// 创建一个File对象,明确它的地址
		File f = new File("d:\\");
		// 将地址中的子目录和子文件存放在一个数组中(绝对路径)
		File[] arr = f.listFiles();
		// 遍历元素
		for (File name : arr) {
			// 判断
			if (name.getName().endsWith(".java")) {
				System.out.println(name.getName());
			}
		}
	}

2、listFiles(FilenameFilter filter) 实现接口的方法

思路:(1)定义一个过滤器
(2)
第一步:定义一个过滤器 ,实现FilenameFilter接口

public class FilenameFilterDemo implements FilenameFilter {
	//	对FilenameFilter接口进行重写
	public boolean accept(File dir, String name) {
		return name.endsWith(".java");
	}
}

实例化对象

 public static void main(String[] args) {
    		//	创建一个File对象
    		File f=new File("d:\\");
    		//	listFiles存储当前文件和目录的路径,
    		//	f.listFiles将所得到的路径传递给new对象
    		//	为什么不用调用方法呢?listFiles底层源码传递了一个过滤的接口,调
    		//	用了FilenameFilter接口里面的accept方法
    		File [] arr=f.listFiles(new FilenameFilterDemo());
    		//	遍历元素
    		for(File name:arr) {
    			System.out.println(name.getName());
    		}
    	}

3、优化方法二
如果我们需要多次过滤某个文件就要在源码中进行多次修改return中的返回值,这样会引起许多麻烦。因此要对第二种方法进行改进。我们可以在实例化对象中传递参数。

//	文件的过滤源文件
public class FilenameFilterSuffx implements FilenameFilter {
	//	指定过滤后缀名的名称suffx
	private String suffx;
	//	构造方法
	FilenameFilterSuffx(String suffx){
		this.suffx=suffx;
	}
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(suffx);
	}
}

实例化对象

public static void main(String[] args) {
		//	创建一个File对象
		File f=new File("d:\\");
		//	把这些目录和文件夹放在一个数组中,并将想要过滤的文件后缀名传递给过滤器源文件
		File [] arr=f.listFiles(new FilenameFilterSuffx(".java"));
		//	对数组进行遍历
		for(File file:arr) {
			System.out.println(file.getName());
		}
	}
}

补充:二。文件夹的过滤

去除当前路径下所有文件夹形式的目录。

public class DirFilefilter implements FileFilter {
	@Override
	public boolean accept(File pathname) {
		return pathname.isDirectory();
	}
}

实例化对象

public class DirFilefilterDemo {
	public static void main(String[] args) {
		//	创建一个File对象
		File f=new File("d:\\");
		// 把文件和目录放在一个File数组中
		File [] arr=f.listFiles(new DirFilefilter());
		for(File file:arr) {
			System.out.println(file);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值