2017/04/12

Java 取得目錄(包含子目錄)內的所有檔案


在 Java 要取得指定目錄的檔案清單,

可利用 File Class 的 list() 方法即可, 其傳回值型態為 String[],

但是這只會取得第一層的檔案清單,

若要取得包含子目錄的檔案清單,

可以參考以下範例 :

 程式碼
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class HelloTomKuo
{
    /** 檔案集合 */
    private List<String> gFileList = new ArrayList<String>();
    
    /** 取得檔案清單
     * @param pPath : 目錄位置
     * @param pIncludeSubDirectory : 是否包含子目錄的檔案
     * @param pFilter : 過濾關鍵字 (* 為全部)
     */
    private void getFiles( File    pPath
                         , boolean pIncludeSubDirectory
                         , String  pFilter
                         )
    {
        // 檔案清單
        String[] vFileArray = pPath.list();
        
        for( int i = 0; i < vFileArray.length; i++ )
        {
            // 完整路徑
            File f = new File( pPath + "\\" + vFileArray[i] );
            
            // 包含子目錄, 則繼續取得子目錄內的檔案清單
            if( pIncludeSubDirectory && f.isDirectory() )
            {
                getFiles( f, pIncludeSubDirectory, pFilter );
            }
            // 檔案, 則加入到 File List 中
            else
            {
                if( pFilter.equals("*") || f.getPath().indexOf(pFilter) >= 0 )
                    gFileList.add( pPath + "\\" + vFileArray[i] );
            }
        }
    }
    
    public static void main(String[] args)
    {
        HelloTomKuomain = new HelloTomKuo();
        
        // 指定的目錄
        String vTopPath = "C:\\圖片";
        
        File vTopPathFile = new File( vTopPath );
        
        // 取得該目錄內的所有檔案
        main.getFiles( vTopPathFile, true, "精選" );
        
        // 顯示取得的檔案清單
        for( String vFileName : main.gFileList )
            System.out.println( vFileName );
        
        System.out.println( "共找到 " + main.gFileList.size() + " 個檔案 !!" );
    }
}