1、目录列表器
/**
* @see DirFilter.java
* @author Al_assad [email protected]
* @date 2016年9月30日 上午9:07:58
* @version V1.0
* Description: 文件目录列表器
* 1、列举处理一个目录下的所有文件和目录;
* 2、拥有过滤功能;
* 3、对列举对象字母字自动排序;
*/
import java.util.*;
import java.io.*;
public class DirList {
private String pathname; /**记录路径名*/
private String[] list; /**记录文件列表*/
private String regex; /**记录文件名过滤用的正则表达式*/
public DirList() throws FileNotFoundException{
this(".");
}
public DirList(String pathanme)throws FileNotFoundException{
this(".",".*");
}
public DirList(String pathname,String regex) throws FileNotFoundException{
this.pathname = pathname;
File path = new File(pathname);
if(!path.exists())
throw new FileNotFoundException();
if(regex.equals(".*"))
list = path.list(); //直接列举文件目录
else
list = path.list(new DirFilter(regex)); //使用指定的FilenameFilter筛选列举目录;
/*该部分可以使用匿名内部类重写
* list = path.list(new FilenameFilter(){
* private Pattern pattern = Pattern.compile(regex);
* public boolean accept(File dir,String name){
* return pattern.matcher(name).matches();
* }
* )*/
//对list按字母顺序进行排序;
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
}
/**在控制台上打印list*/
public void print(){
for(String dirItem : list)
System.out.println(dirItem);
}
/**返回list结果*/
public String[] getList(){
return this.list;
}
}
/**
* @see FilenameFilter
* @author Al_assad [email protected]
* @date 2016年9月30日 上午9:45:34
* @version V1.0
* Description: 文件目录筛选器
* 接口FilenameFilter的内容:
* public interface FilenameFilter{
* boolean accpet(File dir,String name); //原始目录文件dir,和待筛选的文件名name;
* }
*
*/
import java.io.*;
import java.util.regex.*;
public class DirFilter implements FilenameFilter{
private Pattern pattern;
public DirFilter(String regex){
pattern = Pattern.compile(regex);
}
public boolean accept(File dir,String name){
return pattern.matcher(name).matches();
}
/* Pattern p = Pattern.compile(regexString);
* Matcher m = p.matcher(targetString);
* boolean result = m.matches();
* */
}
2、目录使用工具
/**
* @see
* @author Al_assad [email protected]
* @date 2016年9月30日 上午10:15:55
* @version V1.0
* Description: 目录实用工具
* 1、local产生本地目录中的文件集;
* 2、walk产生给定目录下的整个目录树的所有文件集;
* 3、提供文件名筛选功能;
*/
import java.io.*;
import java.util.regex.*;
import java.util.*;
public class Directory {
/**local产生本地目录中的文件集,以File数组的形式返回*/
public static File[] local(File dir,final String regex){
return dir.listFiles(new FilenameFilter(){
private Pattern pattern = Pattern.compile(regex);
public boolean accept(File dir,String name){
return pattern.matcher(name).matches();
}
});
}
public static File[] local(String path,final String regex){
return local(new File(path),regex);
}
/**walk产生给定目录下的整个目录树的所有文件集,结果以TreeInfo的形式返回(使用递归的方式进行访问)*/
public static TreeInfo walk(String start,String regex){
return recurseDirs(new File(start),regex);
}
public static TreeInfo walk (File start,String regex){
return recurseDirs(start,regex);
}
public static TreeInfo walk (File start){
return recurseDirs(start,".*");
}
public static TreeInfo walk (String start){
return recurseDirs(new File(start),".*");
}
private static TreeInfo recurseDirs(File start,String regex){
TreeInfo result = new TreeInfo();
for(File item : start.listFiles()){
if(item.isDirectory()){
result.dirs.add(item);
result.addAll(recurseDirs(item,regex));
}else{
if(item.getName().matches(regex))
result.files.add(item);
}
}
return result;
}
//定义内部类TreeInfo文件树信息类
public static class TreeInfo implements Iterable<File>{
public List<File> files = new ArrayList<File>();
public List<File> dirs = new ArrayList<File>();
public Iterator<File> iterator(){
return files.iterator();
}
void addAll(TreeInfo tree){
this.files.addAll(tree.files);
this.dirs.addAll(tree.dirs);
}
public String toString(){
return "files:"+getListStr(files)+"\ndirs:"+getListStr(dirs);
}
private String getListStr(List<File> list){
String str ="[\n";
for(File element : list)
str += (element.getName() +"\n");
str += "]";
return str;
}
}
}