前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 解决文件名重复问题的两种方法

java 解决文件名重复问题的两种方法

作者头像
程序员徐公
发布2018-09-17 16:07:15
3.8K0
发布2018-09-17 16:07:15
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1340357

java 解决文件名重复问题的两种方法

在项目开发过程中,在保存文件的时候,通常要考虑文件名重复的情况,一般来说会有两种做法

1.如果文件名不存在,不修改文件名;如果存在在文件名。在文件名后面加数字,1,2,3 。。。

  1. 以“时间戳+随机数”来命名文件

第一种方法的实现

代码语言:javascript
复制
   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;

代码语言:javascript
复制
/**
     *
     * @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 + ‘)’,直到文件不存在。

以“时间戳+随机数”来命名文件

代码语言:javascript
复制
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 进行处理,加上当前的时间,以及随机文件编号,确保文件名是唯一的;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一种方法的实现
    • 首先我们先来了解一下 toPrefix,toSuffix 是什么?
      • 原理解析
      • 以“时间戳+随机数”来命名文件
        • 原理解析
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档