求文件夹下txt文件的个数

本文介绍了两种使用Java实现递归查找指定文件夹下txt文件的方法。方法一是通过递归和条件判断,方法二是利用FileNameFilter过滤器。这两种方法都能够找出并统计txt文件的数量,但方式二的递归查找存在限制。示例代码详细展示了实现过程。
摘要由CSDN通过智能技术生成

求文件夹下txt文件的个数

现在,我们想使用一些方法去求一个文件夹下txt 文件的个数 , 但是,文件夹下可能还会有 txt 文件,所以我们用到递归方法;

方法1:使用递归和条件查询,得到标准文件的字符串类型的文件名,并用String方法endsWith判断该标准文件是不是以指定后缀结尾的;

方法2:使用FileNameFilter文件名过滤器去递归;

使用递归并判断是否以指定后缀结尾

  • 先判断我们所求的文件夹是否存在;
  • 再去判断它是不是标准文件;
  • 如果它是标准文件就拿到文件名用 endswith 进行条件判断,判断它是否以指定后缀结尾;就得到满足条件的文件了;
  • 如果不是标准文件,那它就是文件夹了,将它转为文件类型的数组;
  • 判断文件数组是否为空,再去使用增强 for 循环去遍历文件数组,使用递归去拿标准文件;
package com.etime99;

import java.io.File;

public class FileName2 {

	public static void main(String[] args) {
		File file=new File("E:"+File.separator+"test");
		int a = test1(file);
		System.out.println(a);
		
	}
	public static int test1(File file) {
		int count=0;//设置一个计数器来求有多少个文件
		if(file.exists()) {//判断文件存不存在
			if(file.isFile()) {//判断是不是标准文件
				String name = file.getName();//得到字符串类型的文件名
				if(name.endsWith("txt")) {//判断文件名是否以txt结尾
					System.out.println(name);//打印满足条件的文件名
					count++;//满足条件就加1
				}
			}else {
				//如果不是标准文件那就是文件夹了,将文件夹转为文件数组
				File[] listFiles = file.listFiles();
				if(listFiles!=null) {//判断文件数组是否为空,才去遍历
					for(File f:listFiles) {
						count+= test1(f);//递归
					}
				}
			}
		}else{
			System.out.println("文件不存在");
		}
		return count;
	}
	
	
}

FileNameFilter文件名过滤器

方式一

  • 判断文件是否存在;
  • 如果文件存在就将文件转为字符串类型的数组,得到文件名;
  • 使用文件名过滤器FileNameFilter,
  • 判断文件是否为标准文件,或文件夹,或以指定后缀结尾;
  • 如果是文件夹就进行递归;
  • 如果是标准文件并以指定后缀结尾的,就返回true;
  • 否则返回false;
  • 使用增强for循环打印字符串数组里的文件名;
package com.etime99;

import java.io.File;
import java.io.FilenameFilter;

public class FileName {

	public static void main(String[] args) {
		// 利用FilenameFileter找出文件夹下的所有txt文件
		File file = new File("E:" + File.separator + "test");
		test1(file);

	}

	public static void test1(File file) {
		if(file.exists()) {//判断文件是否存在
			String[] fileNameArrays = file.list(new FilenameFilter() {

				@Override
				public boolean accept(File dir, String name) {
					File file = new File(dir, name);
					boolean isFile = file.isFile();// 判断是否是标准文件
					boolean isDirectory = file.isDirectory();//判断文件是不是文件夹
					boolean endsWith = name.endsWith("txt");// 判断是否以TXT结尾
					
					if (isDirectory) {// 如果是文件夹就进行递归
						test1(file);
					}
					if (isFile && endsWith) {// 如果是标准文件且是以txt结尾,就返回true
						return true;
					} else {
						return false;
					}
				}
			});
			for (String name : fileNameArrays) {// 打印文件名
				System.out.println(name);
			}
		}else {
			System.out.println(file.getName()+"该文件不存在");
		}
		
	}

}

方式二

该方法是使用文件名过滤器接口实现查找文件,具体步骤和方式一差别不大;
但是:还留有问题,只能查找文件夹以下第一层的文件,还无法递归查找文件夹下的文件夹,该问题还有待解决!!!

package com.etime99;

import java.io.File;
import java.io.FilenameFilter;

public class FileName1 {

	public static void main(String[] args) {
		// 利用FilenameFileter找出文件夹下的所有txt文件
		File file = new File("E:" + File.separator + "test");//创建文件对象
		String[] fileNameArrays = file.list(new GetName());// 调用实现文件名过滤器接口的类
		for (String name : fileNameArrays) {// 打印文件名
			System.out.println(name);
		}
	}

}

class GetName implements FilenameFilter {

	@Override
	public boolean accept(File dir, String name) {
		File file = new File(dir, name);
		boolean isFile = file.isFile();// 判断是否是标准文件
		//boolean isDirectory = file.isDirectory();//判断是否是文件夹
		boolean endsWith = name.endsWith("txt");// 判断是否以TXT结尾
		if (isFile && endsWith) {// 如果是标准文件且是以txt结尾,就返回true
			return true;
		} else {
			return false;
		}
	}

}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值