目前系统里的文件是用文件名+时间戳来命名的,时间是精确到毫秒级的,但是有时候由于同一时刻数据量比较集中,会出现文件名重复的问题,如:TEST_20081230152346536,也想过用纳秒级的来做,但是那个方法只支持JDK1.5的情况,现在用的是1.4的版本,所以实现不了。
      我还有一个想法就是用随机数,把生成的随机数加到文件名最后,这样基本上可以解决问题,但是也会存在重复的风险。所以想请教高手有没有更好的解决办法?

解决方案 »

  1.   

    使用java.util.UUID这个决对可行
      

  2.   

    java.util.UUID这个好像只有JDK1.5才支持的吧
      

  3.   

    import java.util.*;  
    public class lihan {  
          
        public static void main(String[] args) {  
            int[] seed=new int[100];
            for(int k=0;k<100;k++)
            {
                seed[k]=k;
            }
            int [] ranArr = new int [100];  
            Random ran = new Random();  
            for(int i = 0 ; i <seed.length ; i++){  
                int j = ran.nextInt(seed.length-i);  
                ranArr [i] = seed [j];  
                seed [j] = seed [seed.length-1-i];  
                System.out.print (ranArr[i]+" ");  
            }  
        }  

    看看这个怎么样文件名加上不重复的随机数应该可以解决(这个是100以内的随机数,用的话自己改改)
      

  4.   

    自己写个工具类,把UUID的源码拷过来就可以了
      

  5.   

    把取时间戳封装为一个方法并设置此方法同步,每次返回前sleep一点时间。
    public synchronize long getSystime()
    {    Thread.sleep(1);
        Return java.util.Calendar.getInstance().getTimeInMillis();}
      

  6.   

    public static synchronized String getSeq()
    {
    if ( value == 0)
    value = 1;
    else if ( value == 999 )
    value = 1;
    else 
    value++;

    return Integer.toString(value);
    }写个序列,生成文件的时候遇到同名  原来文件名后面跟个.append(xxx.getSeq()).toString())
      

  7.   

    使用 这个可以解决你的问题
    System.nanoTime();

    System.currentTimeMillis();
    精确