การอ่านรายชื่อไฟล์จาก Directory ที่ต้องการ

พอดีมีงานที่ต้องทำเป็นลักษณะของ Job Scheduler ที่ต้องไปอ่านไฟล์ทั้งหมดจาก Directory ที่ระบุไว้เพื่อทำการ Import หาตัวอย่าง code มาแล้วกว่าว่าจะลืม มา note ไว้กันลืมครับ
1. สร้าง Filter class implement interface FilenameFilter เพื่อทำการกรองเฉพาะไฟล์ที่ต้องการ

/**
 * File Name : FileFilter.java
 * Created Date : Nov 10, 2009 : 3:32:22 PM
 * Copyright © 2009 www.fun4station.com
 */
package com.fun4station.filter;

import java.io.File;
import java.io.FilenameFilter;

/**
 * @Author Supot Saelao 
 * @Version 1.0
 */
public class FileFilter implements FilenameFilter{

	private String[] extensions;
	public FileFilter(){
		
	}
	
	public FileFilter(String ... extensions){
		this.extensions = extensions;
	}	
	
	@Override
	public boolean accept(File dir, String name) {		
		return this.isMatchs(name);
	}

	private boolean isMatchs(String fileName){
		boolean isFound = false;
		for(String str : extensions){
			if(fileName.endsWith(str)){
				isFound = true;
				break;
			}
		}
		return isFound;
	}
}


ซึ่งใน interface FilenameFilter จะมี method ชื่อ

public boolean accept(File dir, String name) {		
	//implement here
}

ให้เรา implement logic ในการเช็คครับ ผมก็เล่นง่ายๆตามตัวอย่างเลยครับ
2. จากนั้นก็ไปสร้าง class TestListFile ทดสอบการดังนี้

/**
 * File Name : TestListFile.java
 * Created Date : Nov 11, 2009 : 8:01:10 AM
 * Copyright © 2009 www.fun4station.com
 */
package com.fun4station.example;

import java.io.File;
import java.io.FilenameFilter;

import com.fun4station.filter.FileFilter;

/**
 * @Author Supot Saelao 
 * @Version 1.0
 */
public class TestListFile {

	public static void main(String[] args) {
		//Filter ".bat" & ".dll" only
		String[] exts = {".bat",".dll"};
		//Create directory path
		File file = new File("D:/AppSource/BriaGroup");
		//Create filter
		FilenameFilter filter = new FileFilter(exts);
		
		String[] files = file.list(filter);
		for (String fileName : files) {
			System.out.println("File : " + fileName);
		}
	}
}

เมื่อสั่งรันก็จะได้ output ประมาณนี้ครับ

File : install service.bat
File : restart service.bat
File : SearchControls.dll
File : uninstall service.bat

นอกจาก List ออกมาเป็นชื่อไฟล์ แล้วก็ยังสามารถ list ออกมาเป็น file object ด้วยครับ โดยเปลี่ยนไปใช้ method

File[] files = file.listFiles(filter);

แทนก็สามารถ list ออกมาเป็น file object สะดวกในการนำไปใช้อีกครับ
อ้างอิง และ ตัวอย่างจาก
How do I get the content of a directory?

  1. No comments yet.