javaer必备的字符串和文件工具类

         今天整理了一下自己的字符串工具类和文件工具类,放上来备份一下:

          首先是字符串工具类:

 

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) {

 等用到哪个规则了,可以定义一个规则的实现类(也可以是内部匿名类),来执行具体规则下的算法。

 

你可能感兴趣的:(javaer必备的字符串和文件工具类)