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); } }



    推荐阅读