当我们做文件的上传时,如果遇到同样的文件名,如果不做处理是会直接覆盖原文件的
所以应该先检测该文件名是否在文件夹里已经存在
先写一个方法,查找出该文件夹下所有文件名称
/**
*
* @param path 需要遍历的路径
* @return 路径下文件的名称集合
*/
private static ArrayList<String> getFile(String path,int deep){
// 获得指定文件对象
File file = new File(path);
// 获得该文件夹内的所有文件
File[] array = file.listFiles();
ArrayList<String> list = new ArrayList<String>();
int n = 0;
for(int i=0;i<array.length;i++)
{
if(array[i].isFile())//如果是文件
{
for (int j = 0; j < deep; j++)//输出前置空格
System.out.print(" ");
// 只输出文件名字
list.add(array[i].getName());
}
}
return list;
}
此时路径下有这一个文件
编写方法检查此文件是否存在,如果存在,在文件名后面加一个索引
/**
*
* @param names 文件下文件名的集合
* @param name 存入的文件名
* @param index 索引的开始位置
* @return 符合要求的文件名
*/
private static String checkFileName(ArrayList<String> names,String name,int index) {
if(names.contains(name.substring(0,name.indexOf("."))+index+name.substring(name.indexOf("."),name.length()))) {
name = checkFileName(names,name,index+1);
} else {
return name.substring(0,name.indexOf("."))+index+name.substring(name.indexOf("."),name.length());
}
return name;
}
}
此时在main方法调用两个方法
ArrayList<String> list = getFile("E:\\Test",0);
//传入一个已经存在的文件名
String filename = "test.txt";
filename = checkFileName(list, filename, 0);
System.out.println(filename);
执行结果
我在路径下新建一个文件(模拟上传上去的)
再次调用方法
结果