java 解决文件名重复问题的两种方法
Posted gdutxiaoxu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 解决文件名重复问题的两种方法相关的知识,希望对你有一定的参考价值。
在项目开发过程中,在保存文件的时候,通常要考虑文件名重复的情况,一般来说会有两种做法
1.如果文件名不存在,不修改文件名;如果存在在文件名。在文件名后面加数字,1,2,3 。。。
- 以“时间戳+随机数”来命名文件
第一种方法的实现
public static File createOrRenameFile(File from)
String[] fileInfo = getFileInfo(from);
String toPrefix=fileInfo[0];
String toSuffix=fileInfo[1];
File file;
file = FileUtils.createOrRenameFile(from, toPrefix, toSuffix);
return file;
/**
* sdcard/pic/tanyang.jpg
*
* toPrefix: tanyang
* toSuffix: tanyang.jpg
* @param from
* @param toPrefix
* @param toSuffix
* @return
*/
public static File createOrRenameFile(File from, String toPrefix, String toSuffix)
File directory = from.getParentFile();
if (!directory.exists())
if (directory.mkdir())
Log.v(TAG, "Created directory " + directory.getAbsolutePath());
File newFile = new File(directory, toPrefix + toSuffix);
for (int i = 1; newFile.exists() && i < Integer.MAX_VALUE; i++)
newFile = new File(directory, toPrefix + '(' + i + ')' + toSuffix);
if (!from.renameTo(newFile))
Log.w(TAG, "Couldn't rename file to " + newFile.getAbsolutePath());
return from;
return newFile;
首先我们先来了解一下 toPrefix,toSuffix 是什么?
1)假如我们文件的全路径是 sdcard/pic/tanyang.jpg ,那么 toPrefix 是 tanyang,toSuffix 是 。jpg
2)假如我们文件的全路径是 sdcard/pic/tanyang ,那么 toPrefix 是 tanyang,toSuffix 是 空字符串。相当于 String toSuffix="";
获取文件的 toPrefix,toSuffix;
/**
*
* @param from
* fileInfo[0]: toPrefix;
* fileInfo[1]:toSuffix;
* @return
*/
public static String[] getFileInfo(File from)
String fileName=from.getName();
int index = fileName.lastIndexOf(".");
String toPrefix="";
String toSuffix="";
if(index==-1)
toPrefix=fileName;
else
toPrefix=fileName.substring(0,index);
toSuffix=fileName.substring(index,fileName.length());
return new String[]toPrefix,toSuffix;
原理解析
- 根据文件名获取 toPrefix,toSuffix。
- 根据 directory,toPrefix,toSuffix 判断文件是否存在,如果存在,toPrefix + ‘(’ + i + ‘)’,直到文件不存在。
以“时间戳+随机数”来命名文件
public static String generateSuffix()
// 获得当前时间
DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
// 转换为字符串
String formatDate = format.format(new Date());
// 随机生成文件编号
int random = new Random().nextInt(10000);
return new StringBuffer().append(formatDate).append(
random).toString();
public static File createFileWithCurDate(File from)
String[] fileInfo = getFileInfo(from);
String toPrefix=fileInfo[0]+generateSuffix();
String toSuffix=fileInfo[1];
return new File(from.getParent(),toPrefix+toSuffix);
原理解析
- 获取文件的 toPrefix,toSuffix;
- 在创建文件之前对 toPrefix 进行处理,加上当前的时间,以及随机文件编号,确保文件名是唯一的;
卖一下广告,欢迎大家关注我的微信公众号程序员徐公, 目前专注于 android 开发,主要分享 Android开发相关知识和一些相关的优秀文章,包括个人总结,职场经验等。
以上是关于java 解决文件名重复问题的两种方法的主要内容,如果未能解决你的问题,请参考以下文章