zoukankan      html  css  js  c++  java
  • 【Java】按时间戳+随机数+用户ID+原名生成不重复新文件名的两种方案

    package test;
    
    import java.text.SimpleDateFormat;
    import java.time.LocalDate;
    import java.time.LocalTime;
    import java.util.Date;
    import java.util.Random;
    
    /**
     * 两种上传到服务器端形成新文件名的方案
     * @author hy
     *
     */
    public class Test5 {
        public static void main(String[] args) {
            String originalName="abc.edf";
            long uid=4;
            
            System.out.println(buildUpname1(uid,originalName));
            System.out.println(buildUpname2(uid,originalName));
        }
        
        /**
         * 按时间戳+随机数+用户ID+原名生成不重复新文件名的方案一
         * 此方案胜在一目了然,败在长度
         * @param uid
         * @param originalName
         * @return
         */
        private static String buildUpname1(long uid,String originalName) {
            SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
            
            StringBuilder sb=new StringBuilder();
            sb.append(sdf.format(new Date()));
            Random rnd=new Random();
            sb.append(rnd.nextInt(100));
            sb.append(uid);
            sb.append("_"+originalName);
        
            return sb.toString();
        }
        
        /**
         * 按时间戳+随机数+用户ID+原名生成不重复新文件名的方案二
         * 此方案胜在相对短小,有些神秘感,败在还原不便
         * @param uid
         * @param originalName
         * @return
         */
        private static String buildUpname2(long uid,String originalName) {
            LocalDate today=LocalDate.now();
            int yearsAfter2020=today.getYear()-2020;
            int days=today.getDayOfYear();
            
            LocalTime now=LocalTime.now();
            int seconds=now.toSecondOfDay();
            
            // %02d 数字两位左补零;%-nS 固定长度为n的字符串,如要继续缩短可以去掉定长
            String prefix=String.format("%02d%-3s%-5s", yearsAfter2020,Long.toHexString(days),Long.toHexString(seconds));
            
            StringBuilder sb=new StringBuilder();
            sb.append(prefix);
            Random rnd=new Random();
            sb.append(rnd.nextInt(100));
            sb.append(uid);
            sb.append("_"+originalName);
        
            return sb.toString();
        }
    }

    输出:

    20211229205152844_abc.edf
    0116b12568494_abc.edf

    END

  • 相关阅读:
    Docker
    Docker1.12服务发现,负载均衡和Routing Mesh
    Docker
    docker
    win7下构建swarm nodes实现跨host的容器之间的通信
    Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
    docker 1.12 版本 docker swarm 集群
    DotNet 资源大全中文版(Awesome最新版)
    Extended WPF Toolkit 新控件介绍
    ServiceStack Web Service 创建与调用简单示列
  • 原文地址:https://www.cnblogs.com/heyang78/p/15746739.html
Copyright © 2011-2022 走看看