有人问及一个用java列举某个文件夹下所有的文件或者目录编程题。结果他不加思索的写了十几行代码,就搞定了,结果面试官说等通知,直到最后都没通知他,我猜想出题人的最终想法是看如何封装代码,如何灵活使用丰富的API。
/*
* @(#)FileEnumerator.java June 11, 2010
*
* Copyright 2009 ... Shanghai, Inc. All rights reserved.
*/
package com.lab.basic;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* List all directory or file.
*
* @author nick...@gmail.com
* @version May 19, 2010 3:22:48 PM
*/
public class FileEnumerator {
private File file;
public enum Type {
ALL, DIRECTORY, FILE;
};
private List<File> fileList = new ArrayList<File>();
public FileEnumerator(File file) {
this.file = file;
}
public List<File> listFile() {
return listFile(Type.ALL);
}
public List<File> listFile(Type type) {
fileList
.addAll(Arrays.asList(file.listFiles(new FileTypeFilter(type))));
return fileList;
}
private class FileTypeFilter implements FileFilter {
private Type type;
private FileTypeFilter(Type type) {
this.type = type;
}
public boolean accept(File file) {
deepLoop(file);
if (type.equals(Type.ALL)) {
return true;
}
if (type.equals(Type.DIRECTORY)) {
return file.isDirectory();
}
return file.isFile();
}
private void deepLoop(File file) {
if (file.isDirectory()) {
fileList.addAll(Arrays.asList(file
.listFiles(new FileTypeFilter(type))));
}
}
}
}
原帖地址: http://lavasoft.blog.51cto.com/62575/286787
–end– |