1. 程式人生 > >Java-IO[列出目錄中指定檔案型別的所有檔案(包含子目錄)]

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表示是否列出子 目錄中的檔案

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