Java-IO[列出目录中指定文件类型的所有文件(包含子目录)]
列出目录中指定文件类型的所有文件
可以选择是否列出子目录中文件,也可以指定多种扩展名
设计步骤:
1.方法listFile (File dir ,FileFilter ff,boolean recursive )方法,把dir目录中
经过ff过滤的文件添加到List的对象中存储 ,使用recursive判断是否过滤子 目录中的文件添加到List
的对象中
2.列出指定 目录下指定扩展名的所有文件(指定一个扩展名的方法)
方法listFile(File dir, final String filename, boolean recursive)
dir表示指定的目录 ,filename 表示扩展名 ,recursive表示是否列出子 目录中的文件
3.列出指定 目录下指定扩展名的所有文件(指定多个扩展名的方法)
方法listFile(File dir,final String[] extensions,boolean recursive)
dir表示指定的目录 ,extensions 表示多个扩展名 ,recursive表示是否列出子 目录中的文件
【Java-IO[列出目录中指定文件类型的所有文件(包含子目录)]】
package kevin.io;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
public class listFiles { public static void main(String[] args) {
listFiles listFiles=new listFiles();
File dir=new File("test");
List files= listFiles.listFile(dir, "txt", true);
System.out.println(files);
String[] str=new String[]{"txt","xlsx"};
List files2= listFiles.listFile(dir, str, true);
System.out.println(files2);
}
/*被调用的方法*/
public static List listFile(File dir,FileFilter ff,boolean recursive){
List list=new ArrayList();
File[] files=dir.listFiles(ff);
if (files!=null && files.length>0) {
for (File f : files) {
//如果是文件,添加文件到list中
if (f.isFile()) {
list.add(f);
}
//获取子目录中的文件,添加子目录中的经过过滤的所有文件添加到list
else if (recursive) {
list.addAll(listFile(f, ff, true));
}
}
}
return list;
}
/*实现方法:指定一个扩展名的方法*/
public List listFile(File dir,final String filename, boolean recursive) {
if (!dir.exists()) {
throw new IllegalArgumentException("目录:" + dir+ "不存在");
}
if (!dir.isDirectory()) {
throw new IllegalArgumentException(dir + "不是目录");
}
FileFilter ff = null;
if (filename == null || filename.length() == 0) {
ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
return true;
}
};
}
else {
ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory())
return true;
String name = pathname.getName();
if (name.indexOf(filename) != -1)
return true;
else
return false;
}
};
}
return listFile(dir, ff, recursive);
}
/*实现方法:指定多个扩展名的方法*/
public List listFile(File dir, final String[] extensions, boolean recursive) {
if (!dir.exists()) {
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
if (!dir.isDirectory()) {
throw new IllegalArgumentException(dir + "不是目录");
}
FileFilter ff = null;
if (extensions == null || extensions.length == 0) {
ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
return true;
}
};
}
else {
ff = new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory())
return true;
String name = pathname.getName();
for (String ext : extensions) {
if (name.endsWith(ext)) {
return true;
}
}
return false;
}
};
}
return listFile(dir, ff, recursive);
}
}
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- 列出所有自定义的function和view
- Java|Java基础——数组
- ssh生成公钥秘钥
- 言情成长小说《后来》|目录
- typeScript入门基础介绍
- laravel框架泛解
- JavaScript|JavaScript之DOM增删改查(重点)
- 新一代Python包管理工具
- Java应该在哪里判断List是否为空