求文件夹下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;
}
}
}