检查磁盘上指定目录是否已经存在同名文件(本代码是检查.jpg文件类型),存在三种情况:

1:不存在,返回查询的名称
	如:输入abc,返回abc
2:存在一个名称相同的文件,返回“预定义的名称+当前日期+001”的新名称
	如:存在一个叫abc.jpg的文件,输入abc,返回abc20101227001
3:存在多个前缀名相同的文件,则返回比编号最大的文件大一个编号的名称
	如:存在abc.jpg,abc20101227001,abc20101227002,…,abc201012270023的文件,输入abc,
返回abc20101227024

======================代码开始==================

import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileDirectorySearch {
		private List list=new ArrayList();
		/**
		 * 获取指定目录下的所有目录
		 *
		 * @param allList
		 *            指定目录
		 * @param endName
		 *            指定以""结尾的文件
		 * @return 得到的文件数目
		 */
		public List findAllFileName(File allList) {
				// 创建fileArray名字的数组
				File[] fileArray = allList.listFiles();
				// 如果传进来一个以文件作为对象的allList 返回0
				if (null == fileArray) {
						return null;
				}
				// 偏历目录下的文件
				for (int i = 0; i < fileArray.length; i++) {
						// 如果是个目录
						if (fileArray[i].isDirectory()) {
								System.out.println("目录: "+fileArray[i].getAbsolutePath());
								list.add(fileArray[i].getAbsolutePath());
								// 递归调用
								findAllFileName(fileArray[i].getAbsoluteFile());
						}
				}
				return list;
		}
		 /**
			* 创建查询指定目录下文件的方法
			*
			* @param allList
			*            指定目录
			* @param endName
			*            指定以“”结尾的文件
			* @return 得到的文件数目
			*/
		 public int findTxtFileCount(File allList, String endName) {
			int textCount = 0;
			// 创建fileArray名字的数组
			File[] fileArray = allList.listFiles();
			// 如果传进来一个以文件作为对象的allList 返回0
			if (null == fileArray) {
			 return 0;
			}
			// 偏历目录下的文件
			for (int i = 0; i < fileArray.length; i++) {
			 // 如果是个目录
			 if (fileArray[i].isDirectory()) {
				// System.out.println("目录: "+fileArray[i].getAbsolutePath());
				// 递归调用
				textCount += findTxtFileCount(fileArray[i].getAbsoluteFile(),
					endName);
				// 如果是文件
			 } else if (fileArray[i].isFile()) {
				// 如果是以“”结尾的文件
				if (fileArray[i].getName().endsWith(endName)) {
				 // 展示文件
				 System.out.println("exe文件: "
					 + fileArray[i].getAbsolutePath());
				 // 所有以“”结尾的文件相加
				 textCount++;
				}
			 }
			}
			return textCount;

		 }

		 /**
			* 在本文件夹下查找
			*
			* @param s
			*            String 文件名
			* @return File[] 找到的文件
			*/
		 public static File[] getFiles(String s) {
			return getFiles("./", s);
		 }

		 /**
			* 获取文件 可以根据正则表达式查找
			*
			* @param dir
			*            String 文件夹名称
			* @param s
			*            String 查找文件名,可带*.?进行模糊查询
			* @return File[] 找到的文件
			*/
		 public static File[] getFiles(String dir, String s) {
			// 开始的文件夹
			File file = new File(dir);
			s = s.replace('.', '#');
			s = s.replaceAll("#", "\\\\.");
			s = s.replace('*', '#');
			s = s.replaceAll("#", ".*");
			s = s.replace('?', '#');
			s = s.replaceAll("#", ".?");
			s = "^" + s + "$";

			Pattern p = Pattern.compile(s);
			ArrayList list = filePattern(file, p);
			File[] rtn = new File[list.size()];
			list.toArray(rtn);
			return rtn;
		 }

		 /**
			* @param file 起始文件夹路径
			* @param Pattern 匹配类型
			* @return ArrayList 其文件夹下的文件夹
			*/
		 private static ArrayList filePattern(File file, Pattern p) {
			//判断传进来的路径是否为null
			if (file == null) {
			 return null;
			} else if (file.isFile()) {    //测试此抽象路径名表示的文件是否是一个标准文件
			 //p.matcher(file.getName())编译给定正则表达式,并尝试将给定输入与其匹配
			 Matcher fMatcher = p.matcher(file.getName()); 
			 if (fMatcher.matches()) {   //尝试将整个区域与模式匹配
				ArrayList list = new ArrayList();
				list.add(file);
				return list;
			 }
			} else if (file.isDirectory()) {  //测试此抽象路径名表示的文件是否是一个目录
			 File[] files = file.listFiles(); //获取此目录下文件的绝对路径,并返回一个数组
			 if (files != null && files.length >= 0) {
				ArrayList list = new ArrayList();
				for (int i = 0; i < files.length; i++) {
				 ArrayList rlist = filePattern(files[i], p);  //递归调用,查看所有文件夹下面的文件
				 if (rlist != null) {
					list.addAll(rlist);
				 }
				}
				return list;
			 }
			}
			return null;
		 }

		 /**
			* 获取数组里的最大值
			* @param filenames
			* @return
			*/
		 private long findMaxNumber(String[] filenames){
			String max=filenames[0];
			int temp;
			for (int i = 1; i < filenames.length; i++) {
			 temp=filenames[i].compareTo(max);
			 if (temp>0) {
				max=filenames[i];
			 }
			}
			return Long.parseLong(max);
		 }

		 /**
		 * 检查磁盘上是否已经存在此文件,存在三种情况:
			* 1:如果不存在,返回预定义的名称
			* 2:如果存在一个名称相同的文件,返回与预定义的名称+当前日期+001
			* 3:如果存在多个前缀名相同的文件,则返回比最新的文件大一个编号的文件名称
			* @param filePath 文件的目录
			* @param fileName 预定义的文件名称
			* @param fileType fileType文件类型名称
			* @return 最终的文件名称
			*/
		 public String checkFileCount(String filePath, String fileName,String fileType) {
			// 获取xxx目录下所有的指定类型文件名称(大写,要带上.)
			File[] files = FileDirectorySearch.getFiles(filePath, fileName+fileType);
			//获取文件个数
			int count=files.length;

			//如果没有这个文件,直接返回文件名称
			if (count==0) {
			 return fileName;
			}else if (count==1) {
			 //获取当前日期
			 Date date =new Date();
			 //格式化日期格式
			 DateFormat dateformat=new SimpleDateFormat("yyyyMMdd");
			 String riqi=dateformat.format(date);
			 riqi+="001";
			 //生成新的文件名称
			 fileName+=riqi;
			 return fileName;
			}else{
			 //定义一个字符串数组,来接收字符串截取后的值
			 String[] filenames = new String[count];
			 //定义截取字符串的开始位置和结束位置和fileName的长度
			 int beginIndex,endIndex,fileNameLength;
			 for (int i = 0; i < files.length; i++) {
				filenames[i]=files[i].toString();
				System.out.println(filenames[i]+"  ");

				//获取文件名称第一次出现的位置
				beginIndex=filenames[i].indexOf(fileName);
			 //获取文件名称第一次出现指定文件类型的位置
				endIndex=filenames[i].indexOf(fileType);
				//获取文件的名称的长度
				fileNameLength=fileName.length();
				//截取字符串
				filenames[i]=filenames[i].substring(beginIndex+fileNameLength, endIndex);
			 }
			 //获取最新的编号,并且加1,如原先名称为"我爱你20101225",则新的编号为"我爱你20101226",保证
			 //不会和原先的文件名重复
			 long maxNumber= this.findMaxNumber(filenames);
			 maxNumber++;
			 //生成新的文件名称
			 fileName+=maxNumber;
			 return fileName;
			}
		 }

		 public static void main(String[] args) {
			//可在此初始化路径和文件名称,以便测试
			String fName = "美女";
			String fPath = "C:/Users/sjhnsm/Pictures";
			FileDirectorySearch fds = new FileDirectorySearch();
			//1
			System.out.println("返回新文件的名称: "+fds.checkFileCount(fPath, fName,".jpg"));
			System.out.println("=================================================");
			//2
			fds.getDirAllfileNames(fPath);
			System.out.println("=================================================");
			//3
			File path = new File(fPath);
			int count = fds.findTxtFileCount(path, ".jpg");
			System.out.println(count);
			System.out.println("=================================================");
			//4
			fds.findAllFileName(path);
		 }
}

===================代码结束====================== 注:本文部分内容借鉴自网络,感谢原作者的无私奉献。此段代码仅限于在特定的环境中正常运行,名称要有一定的命名规则,截取的编号部分只能是数字且尽量不要以0开头,否则会改变名称的长度(如不在乎长度的变化,可忽略此处),如:存在编号为A,A0001的文件,返回的新名称会是A2,而不是A0002。另本段代码仍有许多不完善之处,欢迎朋友们提出好的解决方案,不胜感激~!