今天整理了一下自己的字符串工具类和文件工具类,放上来备份一下:
首先是字符串工具类:
package util; /** * StringUtil : 字符串公共操作类 * * @author xuejupo [email protected] * * create in 2016-1-8 上午11:16:36 */ public class StringUtils { private StringUtils() { } // 单例模式,创建对象 static class StringUtilsSingle { public static final StringUtils single = new StringUtils(); } /** * getInstance: 获得字符串公共类的单例对象 * * @return FileUtil 返回类型 */ public static StringUtils getInstance() { return StringUtilsSingle.single; } /** * isEmpty: 查询字符串str是否为空 * * @param str * @return boolean 返回类型 */ public boolean isEmpty(String str) { if (str == null || str.trim().length() == 0) { return true; } return false; } /** * isNotEmpty: 查询字符串str是否为非空 * * @param str * @return boolean 返回类型 */ public boolean isNotEmpty(String str) { return !this.isEmpty(str); } /** * fromIsBigger: 查询字符串from是否比to大 规定: 当to为空的时候,不管from是什么,都认为from比to大 * * @param from * @param to * @return boolean 返回类型 */ public boolean fromIsBigger(String from, String to) { if (this.isEmpty(to)) { return true; } if (this.isEmpty(from)) { return false; } return from.compareTo(to) > 0 ? true : false; } /** * fromIsBigger: 查询字符串from是否比to小 规定: 当from为空的时候,不管to是什么,都认为from比to小 * * @param from * @param to * @return boolean 返回类型 */ public boolean fromIsSmaller(String from, String to) { if (this.isEmpty(from)) { return true; } if (this.isEmpty(to)) { return false; } return from.compareTo(to) < 0 ? true : false; } /** * fillingToSize: 将字符串填充至size大小,默认用空格填充,如果str大小比size大,则从前截取 如: str:abcdefg * size:3 return:abc * * @param str * @param size * @return String 返回类型 */ public String fillingToSize(String str, int size) { return this.fillingToSize(str, size, ' '); } /** * fillingToSize: 将字符串填充至size大小,使用字符fillChar填充 如果str大小比size大,则从前截取 如: * str:abcdefg size:3 return:abc * * @param str * @param size * @param fillChar * @return String 返回类型 */ public String fillingToSize(String str, int size, char fillChar) { if (str == null) { throw new NullPointerException( "StringUtils.fillingToSize错误:原始字符串不能为null"); } char[] cs = this.fillingToSize(str.toCharArray(), str.length(), size, fillChar); return new String(cs); } /** * fillingToSize: 将字符串填充至size大小,使用字符fillChar填充 如果str大小比size大,则从前截取 * * @param str * 原始字符数组 * @param length * 原始字符串的大小 * @param size * 填充后的大小 * @param fillChar * 填充字符 * @return char[] 返回类型 */ private char[] fillingToSize(char[] str, int length, int size, char fillChar) { char[] result = new char[size]; if (length > size) { System.arraycopy(str, 0, result, 0, size); return result; } else if (length == size) { return str; } else { System.arraycopy(str, 0, result, 0, length); for (; length < size; length++) { result[length] = fillChar; } return result; } } }
其次是文件工具类:
package util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Scanner; import java.util.Vector; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; import exception.FileNameIsWrongException; import exception.PathIsNotNormalException; /** * FileUtil : 文件公共类 * @author xuejupo [email protected] * create in 2016-1-8 上午11:14:28 */ public class FileUtils { //获得字符串工具对象 private StringUtils tool = StringUtils.getInstance(); private FileUtils() { } // 单例模式,创建对象 static class FileUtilSingle { public static final FileUtils single = new FileUtils(); } /** * getInstance: 获得文件公共类的单例对象 * @return * FileUtil 返回类型 */ public static FileUtils getInstance() { return FileUtilSingle.single; } /** * 获取文件夹下文件(单层,包含目录) * * @param fileName * 文件夹 * @return 返回该目录下所有文件(包括目录)的全名组成的list集合 */ public List<String> getFileNamesFirstLevels(String fileName) { List<String> l = new ArrayList<String>(); File dir = this.getDir(fileName); File[] files = dir.listFiles(); if(files == null){ return l; } for (File f : files) { l.add(f.getPath()); } return l; } /** * 获取文件夹下文件(单层,包含目录) * * @param fileName * 文件夹 * compare 自定义匹配规则 * @return 返回该目录下所有文件(包括目录)的全名组成的list集合 */ public List<String> getFileNamesFirstLevels(String fileName,CompareByFile compare) { List<String> l = new ArrayList<String>(); File dir = this.getDir(fileName); File[] files = dir.listFiles(); if(files == null){ return l; } for (File f : files) { if(compare.compare(f)){ l.add(f.getPath()); } } return l; } /** * 获取文件夹下文件名字(单层) * * isFile = 1表示只获取当前文件夹下文件,isFile = 0 表示获取当前文件夹下目录 * @param fileName * 文件夹 * @return 返回该目录下所有文件的全名组成的list集合 */ public List<String> getFileFirstLevels(String fileName,int isFile) { List<String> l = new ArrayList<String>(); File dir = this.getDir(fileName); File[] files = dir.listFiles(); for (File f : files) { int i = f.isDirectory() == true ? 1 : 0; if((i ^ isFile) == 0){ continue; } l.add(f.getPath()); } return l; } /** * 获取文件夹下特定文件或文件夹名字(单层)--模糊查询 * @param dirName 文件夹 * @param fileName 模糊匹配字符串 * 文件夹 * @return 返回该目录下所有文件的全名组成的list集合 */ public List<String> getFileFirstLevelsFuzzy(String dirName,String fileName){ List<String> l = new ArrayList<String>(); File dir = this.getDir(dirName); File[] files = dir.listFiles(); for (File f : files) { if(isMatch(f.getName(),fileName)){ l.add(f.getPath()); } } return l; } /** * 获取文件夹下特定文件或文件夹名字(单层)--精确查询 * @param dirName * @param fileName * 文件夹 * @return 返回该目录下所有文件的全名组成的list集合 */ public List<String> getFileFirstLevels(String dirName,String fileName){ List<String> l = new ArrayList<String>(); File dir = this.getDir(fileName); File[] files = dir.listFiles(); for (File f : files) { if(f.getName().equals(fileName)){ l.add(f.getPath()); } } return l; } /** * 文件名模糊匹配算法(目前仅支持匹配字符串只有一个.的情况) * 如果匹配字符串带. 并且.前面没有字符 则认为是匹配文件的类型, * 如.txt 认为是匹配所有的txt文件或者文件后缀带有txt的文件 * 如.rm 可以匹配到所有的.rmvb文件和.rm文件 * 如果匹配字符串没有. 则认为只需匹配文件名 * 如匹配字符串为abc 则匹配所有的类似*abc*.*的文件, 但是类似abd.abc不会被匹配到 */ private boolean isMatch(String file,String match){ if(tool.isEmpty(file) || tool.isEmpty(match)){ return false; } //如果match带. 文件名不带. 直接错误 if(!file.contains(".") && match.contains(".")){ return false; }else if(!file.contains(".") && !match.contains(".")){ return file.contains(match); }else if(file.contains(".") && !match.contains(".")){ String fileName = file.substring(0,file.lastIndexOf(".")); return fileName.contains(match); }else{ //以下是,文件名带. 匹配字符串也带. String fileName = file.substring(0,file.lastIndexOf(".")); String fileType = file.substring(file.lastIndexOf(".")+1,file.length()); if(match.startsWith(".")){ return match.endsWith(fileType); } String matchName = match.substring(0,match.lastIndexOf(".")); String matchType = match.substring(match.lastIndexOf(".")+1,match.length()); if(!matchType.endsWith(fileType)){ return false; } if(fileName.contains(matchName)){ return true; } } return false; } /** * isFileExist: 判断指定的路径文件或文件夹是否存在 * @param fileName * @return * boolean 返回类型 */ public boolean isFileExist(String fileName){ try{ new File(fileName); }catch(Exception e){ return false; } return true; } /** * pathIsFile: 判断指定的路径是否是文件 * @param fileName * @return * boolean 返回类型 */ public boolean pathIsFile(String fileName){ try{ File f = new File(fileName); if(f.isFile()){ return true; } }catch(Exception e){ return false; } return false; } /** * getDir: 获取指定路径的文件 * @param fileName * @return * File 返回类型 */ public File getFile(String fileName) { File f = null; try{ f = new File(fileName); if(!f.isFile()){ throw new PathIsNotNormalException("该路径不是文件"); } }catch(Exception e){ throw new FileNameIsWrongException("文件路径出错:"+fileName); } return f; } /** * getDir: 获取指定路径的文件夹 * @param fileName * @return * File 返回类型 */ public File getDir(String fileName){ File f = null; try{ f = new File(fileName); if(!f.isDirectory()){ throw new PathIsNotNormalException("该路径不是文件夹"); } }catch(Exception e){ throw new FileNameIsWrongException("文件路径出错:"+fileName); } return f; } /** * * 获取文件夹下文件名字 * * @param fileName * @return 返回一个动态数组,在动态数组里,每一个目录极其单层下文件名组成一个list集合 */ public Vector<List<String>> getFileNamesByDepth(String fileName){ return this.getFileNamesByDepth(fileName, Integer.MAX_VALUE); } /** * * 获取文件夹下文件名字 * * @param fileName * @param depth * 第几层 如果depth小于等于1,等同查询单层下的文件名 * @return 返回一个动态数组,在动态数组里,每一个目录极其单层下文件名组成一个list集合 */ public Vector<List<String>> getFileNamesByDepth(String fileName, int depth) { Vector<List<String>> reVector = new Vector<List<String>>(); Queue<List<String>> qFile = new LinkedList<List<String>>(); if (depth <= 1) { reVector.add(this.getFileNamesFirstLevels(fileName)); return reVector; } List<String> l = new ArrayList<String>(); // 将目录下第一层文件名放入队列 l = getFileNamesFirstLevels(fileName); qFile.offer(l); //null是个隔离字符 qFile.offer(null); reVector.add(l); // 将第一层底下剩余层数加入到返回数组里 for (int i = 0; i < depth-1 ; i++) { List<String> arr = qFile.poll(); System.out.println(i+"========"+arr==null?"0":arr.size()); while (arr != null) { for (String name : arr) { if(this.pathIsFile(name)){ continue; } System.out.println(name); List<String> temp = this.getFileNamesFirstLevels(name); if(temp != null){ reVector.add(temp); qFile.offer(temp); } } arr = qFile.poll(); } //设定循环的退出条件---当队列里无数据时退出 if(qFile.isEmpty()){ break; } //一层循环之后,向队列里加入一个隔离符 if(qFile.peek() != null){ qFile.offer(null); } } return reVector; } /** * 查找当前目录下所有文件名(不含目录) * @param fileName * @return 返回该目录下所有的文件全名的list集合 */ public List<String> getFileNames(String fileName){ Queue<List<String>> q = new LinkedList<List<String>>(); List<String> l = this.getFileFirstLevels(fileName,1); List<String> dirs = this.getFileFirstLevels(fileName,0); q.offer(dirs); while(true){ dirs = q.poll(); if(dirs == null){ break; } for(String dir: dirs){ List<String> files = this.getFileFirstLevels(dir,1); List<String> tempDirs = this.getFileFirstLevels(dir,0); if(files != null){ l.addAll(files); } if(tempDirs != null){ q.offer(tempDirs); } } } return l; } /** * 查找当前目录下目标文件--- 模糊匹配 * @param fileName * @return 返回该目录下所有的文件全名的list集合 */ public List<String> serachFileNamesFuzzy(String dirName,String fileName){ Queue<List<String>> q = new LinkedList<List<String>>(); List<String> l = this.getFileFirstLevelsFuzzy(dirName,fileName); List<String> dirs = this.getFileFirstLevels(dirName,0); q.offer(dirs); while(true){ dirs = q.poll(); if(dirs == null){ break; } for(String dir: dirs){ List<String> files = this.getFileFirstLevelsFuzzy(dir,fileName); List<String> tempDirs = this.getFileFirstLevels(dir,0); if(files != null){ l.addAll(files); } if(tempDirs != null){ q.offer(tempDirs); } } } return l; } /** * 读写锁 */ private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(false); private Lock rLock = rwl.readLock(); private Lock wLock = rwl.writeLock(); /** * readFile: 读取文件内容 * @param fileName * @return * String 返回类型 */ public String readFile(String fileName){ return this.readFile(fileName, new FileInfoFilter() { @Override public String compare(String str) { // TODO Auto-generated method stub return str; } }); } /** * readFile: 读取文件内容 * @param fileName * filter 过滤器 * @return * String 返回类型 */ public String readFile(String fileName,FileInfoFilter filter){ rLock.lock(); StringBuilder sb = new StringBuilder(); try { Scanner sc = new Scanner(this.getFile(fileName)); while(sc.hasNext()){ sb.append(filter.compare(sc.nextLine())); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ rLock.unlock(); } return sb.toString(); } /** * writeFile: 写文件 * @param fileName * append 是否追加 * @return * String 返回类型 */ public boolean writeFile(String fileName,String info,boolean append){ wLock.lock(); FileWriter fw = null; try { fw = new FileWriter(this.getFile(fileName), append); fw.write(info); } catch (IOException e) { // TODO Auto-generated catch block return false; }finally{ wLock.unlock(); try { fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return true; } } /** * CompareByFileInfo:文件内容过滤接口 * @author xuejupo [email protected] * create in 2016-1-8 下午4:26:14 * */ interface FileInfoFilter{ String compare(String str); } /** * CompareByFile: 文件名比对规则接口 * @author xuejupo [email protected] * create in 2016-1-8 下午4:27:21 * */ interface CompareByFile{ boolean compare(File f1); }
测试代码:
package util; import java.io.File; import java.util.List; import java.util.Vector; /** * Test : * @author xuejupo [email protected] * create in 2016-1-8 下午2:40:13 */ public class Test { /** * main: * @param args * void 返回类型 */ public static void main(String[] args) { // TODO Auto-generated method stub FileUtils tool = FileUtils.getInstance(); List<String> l = tool.getFileNamesFirstLevels("d:/"); List<String> lDir = tool.getFileFirstLevels("d:/",0); List<String> lFile = tool.getFileFirstLevels("d:/",1); List<String> lTxt = tool.getFileFirstLevelsFuzzy("d:/",".txt"); System.out.println("单层查询test-----------------------------"); System.out.println("============d盘下所有文件和文件夹:============="); printList(l); System.out.println("=============d盘下所有文件夹:============"); printList(lDir); System.out.println("==============d盘下所有文件:==================="); printList(lFile); System.out.println("==============d盘下txt文件:==================="); printList(lTxt); System.out.println("多层查询test-----------------------------"); Vector<List<String>> v = tool.getFileNamesByDepth("d:/", 2); for(List<String> ls:v){ printList(ls); } System.out.println("==============使用自定义的匹配接口==================="); List<String> lCom = tool.getFileNamesFirstLevels("d:/",new CompareByFile(){ @Override public boolean compare(File f1) { // TODO Auto-generated method stub return f1.isFile(); } }); printList(lCom); for(int i = 0; i < 10; i++){ tool.writeFile("d:/xml.txt", "abc", false); } System.out.println("----------读取文件内容:"); System.out.println(tool.readFile("d:/xml.txt")); } private static void printList(List<String> l){ for(String name:l){ System.out.println(name); } } }
测试结果:
单层查询test----------------------------- ============d盘下所有文件和文件夹:============= d:\$RECYCLE.BIN d:\360Downloads d:\360WiFi d:\7450 d:\android d:\boxTest14.log d:\boxTest16.log d:\boxTest16.log.2015-12-25 d:\boxTest16.log.2015-12-29 d:\boxTest162.log d:\boxTest162.log.bak d:\data d:\DOWNLOAD d:\gongjiao d:\kinggsoft d:\log d:\maven d:\opt d:\program d:\Program Files d:\Program Files (x86) d:\RJ d:\shuju d:\StormMedia d:\System Volume Information d:\test d:\test.png d:\updateEdb d:\work d:\xml.txt d:\xml.txt.bak d:\Youku Files d:\备份 d:\学习笔记 d:\迅雷下载 =============d盘下文件家:============ d:\$RECYCLE.BIN d:\360Downloads d:\360WiFi d:\7450 d:\android d:\data d:\DOWNLOAD d:\gongjiao d:\kinggsoft d:\log d:\maven d:\opt d:\program d:\Program Files d:\Program Files (x86) d:\RJ d:\shuju d:\StormMedia d:\System Volume Information d:\test d:\updateEdb d:\work d:\Youku Files d:\备份 d:\学习笔记 d:\迅雷下载 ==============d盘下文件:=================== d:\boxTest14.log d:\boxTest16.log d:\boxTest16.log.2015-12-25 d:\boxTest16.log.2015-12-29 d:\boxTest162.log d:\boxTest162.log.bak d:\test.png d:\xml.txt d:\xml.txt.bak ==============d盘下txt文件:=================== d:\xml.txt 多层查询test----------------------------- 35 d:\$RECYCLE.BIN d:\360Downloads d:\360WiFi d:\7450 d:\android d:\data d:\DOWNLOAD d:\gongjiao d:\kinggsoft d:\log d:\maven d:\opt d:\program d:\Program Files d:\Program Files (x86) d:\RJ d:\shuju d:\StormMedia d:\System Volume Information d:\test d:\updateEdb d:\work d:\Youku Files d:\备份 d:\学习笔记 d:\迅雷下载 d:\$RECYCLE.BIN d:\360Downloads d:\360WiFi d:\7450 d:\android d:\boxTest14.log d:\boxTest16.log d:\boxTest16.log.2015-12-25 d:\boxTest16.log.2015-12-29 d:\boxTest162.log d:\boxTest162.log.bak d:\data d:\DOWNLOAD d:\gongjiao d:\kinggsoft d:\log d:\maven d:\opt d:\program d:\Program Files d:\Program Files (x86) d:\RJ d:\shuju d:\StormMedia d:\System Volume Information d:\test d:\test.png d:\updateEdb d:\work d:\xml.txt d:\xml.txt.bak d:\Youku Files d:\备份 d:\学习笔记 d:\迅雷下载 d:\$RECYCLE.BIN\S-1-5-21-1007249876-126544197-2128686320-1000 d:\$RECYCLE.BIN\S-1-5-21-1007249876-126544197-2128686320-500 d:\360Downloads\HotFix d:\360Downloads\Software d:\360WiFi\thumb d:\7450\Audio_Driver_Y8V8V_WN_6_0_1_6053_A08.EXE d:\7450\broadcom_bt_6515800_525.exe d:\7450\dell_System_Utilities_Driver_TGP2J_WN_1128_A00.EXE d:\7450\intel_dptf_8010071.exe d:\7450\intel_dynamicp_7102105.exe d:\7450\intel_inf_10027_58.exe d:\7450\intel_inf_9421019.exe d:\7450\intel_rst_13601002_64.exe d:\7450\intel_usb_3_0_extensible_3_0_4_65.exe d:\7450\intel_vga_1018144206_64_513.exe d:\7450\Network_Driver_JGGHH_WN32_19_5_0_0_A11.EXE d:\7450\wifi d:\android\android-sdk d:\android\gaiqianProject d:\android\lib d:\android\ServerProject d:\android\新建文件夹 d:\data\applogs d:\DOWNLOAD\SVN下载 d:\DOWNLOAD\网页下载 d:\DOWNLOAD\迅雷下载 d:\gongjiao\graph d:\gongjiao\graph.rar d:\gongjiao\jxl.jar d:\gongjiao\用户信息.xls d:\gongjiao\连云港.xls d:\kinggsoft\kdu_bba d:\log\time_insert_info.log d:\maven\repository d:\opt\0 d:\opt\applog d:\opt\新建文件夹 (2) d:\program\DriverGenius d:\program\FlashFXP d:\program\pdf d:\program\QQpinyin d:\program\UltraEdit d:\program\WeChat d:\Program Files\EASYDatahuifutool d:\Program Files\EASYDatahuifutool.rar d:\Program Files\jboss-5.1.0.GA d:\Program Files (x86)\11game d:\Program Files (x86)\AliQinTao d:\Program Files (x86)\AliWangWang d:\Program Files (x86)\Baofeng d:\Program Files (x86)\Beyond Compare 3 d:\Program Files (x86)\YouKu d:\Program Files (x86)\魔兽争霸3冰封王座 d:\shuju\guangzhou28.txt d:\shuju\shanghai28.txt d:\shuju\shenzhen28 d:\StormMedia\1B2156C43D502AE3B2D96A59C1689E2A33602E66 d:\test\0 d:\test\1 d:\updateEdb\新建文本文档 - 副本 (10).txt d:\updateEdb\新建文本文档 - 副本 (11).txt d:\updateEdb\新建文本文档 - 副本 (12).txt d:\updateEdb\新建文本文档 - 副本 (13).txt d:\updateEdb\新建文本文档 - 副本 (14).txt d:\updateEdb\新建文本文档 - 副本 (15).txt d:\updateEdb\新建文本文档 - 副本 (16).txt d:\updateEdb\新建文本文档 - 副本 (17).txt d:\updateEdb\新建文本文档 - 副本 (18).txt d:\updateEdb\新建文本文档 - 副本 (19).txt d:\updateEdb\新建文本文档 - 副本 (2).txt d:\updateEdb\新建文本文档 - 副本 (20).txt d:\updateEdb\新建文本文档 - 副本 (3).txt d:\updateEdb\新建文本文档 - 副本 (4).txt d:\updateEdb\新建文本文档 - 副本 (5).txt d:\updateEdb\新建文本文档 - 副本 (6).txt d:\updateEdb\新建文本文档 - 副本 (7).txt d:\updateEdb\新建文本文档 - 副本 (8).txt d:\updateEdb\新建文本文档 - 副本 (9).txt d:\updateEdb\新建文本文档 - 副本.txt d:\updateEdb\新建文本文档.txt d:\work\79上线文档.doc d:\work\apache-maven-3.0.4 d:\work\apache-maven-3.0.4-bin.zip d:\work\eclipseJEE d:\work\eclipseJEE.rar d:\work\FlashFXP d:\work\Foxmail 7.2 d:\work\instantclient_12_1 d:\work\instantclient_12_1.rar d:\work\jboss d:\work\Navicat d:\work\SecureCRT d:\work\SecureCRT.rar d:\work\发布文档.doc d:\Youku Files\download d:\Youku Files\transcode d:\Youku Files\youkudisk d:\备份\BoxMid d:\备份\各种密码.doc d:\学习笔记\安卓 d:\迅雷下载\Big.Hero.6.2014.1080p.WEB-DL.DD5.1.H264-RARBG d:\迅雷下载\desktop.ini d:\迅雷下载\Lan.Kwai.Fong.3.2014.720p.BluRay.x264-WiKi [PublicHD] d:\迅雷下载\Pixels.2015.720p.WEBRip.x264.AAC2.0-RARBG d:\迅雷下载\[电影天堂www.dy2018.net].死亡飞车3:地狱烈焰.720p.BD中英双字幕.rmvb d:\迅雷下载\[电影天堂www.dy2018.net]死亡飞车2BD中英双字.midownload d:\迅雷下载\[阳光电影www.ygdy8.com].超能陆战队.HD.720p.中英双字幕.midownload d:\迅雷下载\【LOL电影天堂www.loldytt.com】九层妖塔.TC1280清晰国语中字.mp4 d:\迅雷下载\【LOL电影天堂www.loldytt.com】蚁人.HD1280超清中英双字.mp4 d:\迅雷下载\像素大战.Pixels.2015.HD720P.X264.AAC.English.CHS.Mp4Ba.torrent d:\迅雷下载\像素大战.Pixels.2015.HD720P.X264.AAC.English.CHS.Mp4Ba.torrent.7z ==============使用自定义的匹配接口=================== d:\boxTest14.log d:\boxTest16.log d:\boxTest16.log.2015-12-25 d:\boxTest16.log.2015-12-29 d:\boxTest162.log d:\boxTest162.log.bak d:\test.png d:\xml.txt d:\xml.txt.bak ----------读取文件内容: abc
看这个方法:
public List<String> getFileNamesFirstLevels(String fileName,CompareByFile compare) {
然后自定义一个接口
/** * CompareByFile: 文件名比对规则接口 * @author xuejupo [email protected] * create in 2016-1-8 下午4:27:21 * */ interface CompareByFile{ boolean compare(File f1); }
就可以利用自定义的规则来获取相应的文件了。比如说我想获取文件,不想要文件夹,那么代码应该就是
List<String> lCom = tool.getFileNamesFirstLevels("d:/",new CompareByFile(){ @Override public boolean compare(File f1) { // TODO Auto-generated method stub return f1.isFile(); } });
印象中这也是一种设计模式,但具体是哪个忘了。。。。
这种形式特别适合这种算法:返回结果的匹配规则可能有多个,但是因为规则太多了,所以把所有规则考虑到不太现实,这时候就可以定义一个规则接口,然后将规则接口以参数的形式传到算法中,如:
public List<String> getFileNamesFirstLevels(String fileName,CompareByFile compare) {
等用到哪个规则了,可以定义一个规则的实现类(也可以是内部匿名类),来执行具体规则下的算法。