在项目开发过程中, 在保存文件的时候, 通常要考虑文件名重复的情况, 一般来说会有两种做法
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 进行处理, 加上当前的时间, 以及随机文件编号, 确保文件名是唯一的;
来源: http://blog.csdn.net/gdutxiaoxu/article/details/79644276