有人問及一個用java列舉某個文件夾下全部的文件或者目錄編程題。結果他不加思索的寫了十幾行代碼,就搞定了,結果面試官說等通知,直到最後都沒通知他,我猜測出題人的最終想法是看如何封裝代碼,如何靈活使用豐富的API。java
因而我試着寫一個可選擇結果,但願對各位有用:面試
import java.io.File;
import java.io.FileFilter; 編程
/** ide
@author leizhimin 2010-3-22 20:58:37
*/
public class FileTest {
public static final byte TYPE_ALL = 0; //全部的文件和文件夾
public static final byte TYPE_FILE = 1; //文件
public static final byte TYPE_DIR = 2; //文件夾 this
public static void main(String args[]) { File[] flist = listFile("C:\\", FileTest.TYPE_FILE); for (File file : flist) { System.out.println(file.getPath()); } } /** * 列舉文件或者目錄 * * @param path 操做目錄 * @param type 列舉的類型 * @return 所列舉的文件或文件夾列表 */ public static File[] listFile(String path, byte type) { File[] result = null; File f = new File(path); switch (type) { case TYPE_ALL: result = f.listFiles(); break; case TYPE_FILE: result = f.listFiles(new MyFileFilter(true)); break; case TYPE_DIR: result = f.listFiles(new MyFileFilter(false)); break; default: result = f.listFiles(); } return result; }
} 設計
/** code
文件過濾器
*/
class MyFileFilter implements FileFilter {
//過濾所要保留的類型是不是文件
private boolean isFile = true; get
MyFileFilter(boolean isFile) { this.isFile = isFile; } public boolean accept(File pathname) { if (isFile) { if (pathname.isFile()) return true; return false; } else { if (pathname.isDirectory()) return true; return false; } }
}it
輸出結果:io
C:\bootfont.bin
C:\ntldr
C:\NTDETECT.COM
C:\CONFIG.SYS
C:\AUTOEXEC.BAT
C:\IO.SYS
C:\MSDOS.SYS
C:\GHLDR
C:\boot.ini
C:\錦衣衛TC國語中字修正聲音甄子丹趙薇2010最新動做大片.rmvb
C:\The.Hurt.Locker.2008.拆彈部隊.雙語字幕.HR-HDTV.AC3.1024x544.x264-人人影視.mkv
C:\Linux程序設計(第三版)_3of2.rar
C:\Linux程序設計(第三版)_3of1.rar
C:\Linux程序設計(第三版)_3of3.rar
C:\Linux程序設計(第三版)_目錄.rar
C:\4.txt
Process finished with exit code 0