【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM