Java-IO[列出目錄中指定檔案型別的所有檔案(包含子目錄)]
阿新 • • 發佈:2019-01-31
列出目錄中指定檔案型別的所有檔案
可以選擇是否列出子目錄中檔案,也可以指定多種副檔名
設計步驟:
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)
可以選擇是否列出子目錄中檔案,也可以指定多種副檔名
設計步驟:
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表示是否列出子 目錄中的檔案
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<File> files= listFiles.listFile(dir, "txt", true); System.out.println(files); String[] str=new String[]{"txt","xlsx"}; List<File> files2= listFiles.listFile(dir, str, true); System.out.println(files2); } /*被呼叫的方法*/ public static List<File> listFile(File dir,FileFilter ff,boolean recursive){ List<File> list=new ArrayList<File>(); 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<File> 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<File> 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); } }