IP地址加时间戳加3位随机数

工作中经常用到时间戳加上3位随机数获得唯一流水号,下面是代码~

package com.pb.viewer.filename;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * 在上传文件的操作中,如果多个用户上传的文件名称一样,则肯定会发生覆盖的
 * 情况,为了解决这个问题,可以采用为上传文件自动命名的方式
 * 自动命名采用的的文件格式如下:IP地址+时间戳+三位随机数
 * 
 * @author Voishion
 *
 */
public class IPTimeStamp {
	private SimpleDateFormat sdf = null;
	private String ip = null;
	private String filename = null;
	
	public IPTimeStamp() {
	}
	public IPTimeStamp(String ip, String filename) {
		this.ip = ip;
		this.filename = filename;
	}
	/**
	 * 得到 IP地址+时间戳+三位随机数 的新文件名
	 * @return
	 */
	public String getIPTimeRandName(){
		StringBuffer buf = new StringBuffer();
		if(this.ip != null){
			String str[] = this.ip.split("\\.");
			for(int i = 0; i < str.length; i++){
				buf.append(this.addZero(str[i], 3));
			}
		}//加上IP地址
		buf.append(this.getTimeStamp());//加上日期
		Random random = new Random();
		for(int i = 0; i < 3; i++){
			buf.append(random.nextInt(10));//取三个随机数追加到StringBuffer
		}
		buf.append("."+this.getFileExt());//加上扩展名
		return buf.toString();
		
	}
	
	/**
	 * 补0操作【如果不够指定位数,则在前面补0】
	 * @param str
	 * @param len
	 * @return
	 */
	private String addZero(String str,int len){
		StringBuffer s = new StringBuffer();
		s.append(str);
		while(s.length() < len){
			s.insert(0, "0");
		}
		return s.toString();		
	}
	
	/**
	 * 取得时间戳
	 * @return
	 */
	private String getTimeStamp(){
		this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		return this.sdf.format(new Date());
	}
	
	/**
	 * 获取文件扩展名
	 * @return
	 */
	private String getFileExt(){
        int i = this.filename.lastIndexOf(".");//返回最后一个点的位置	
	    String extension = this.filename.substring(i+1);//取出扩展名
		return extension;
	}
}
posted @ 2018-09-25 17:51  奔跑的大龙猫  阅读(844)  评论(0编辑  收藏  举报