版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1340357
在项目开发过程中,在保存文件的时候,通常要考虑文件名重复的情况,一般来说会有两种做法
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;
}
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};
}
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);
}