public synchronized String createtFileName() {
java.util.Date dt = new java.util.Date(System.currentTimeMillis());
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String fileName= fmt.format(dt);
fileName = fileName + ".txt" //extension, you can change it.
return fileName;
}

解决方案 »

  1.   

    好;)createtFileName(String strExtension)更好
      

  2.   

    new Date().getTime()得到的是自1970年1月1日0:00到当前时间共经过了多少秒
      

  3.   

    产生随机数的方法
    int i = (int)(java.lang.math.random()*10000);
    产生一个最大9999的随机数,但产生的数是有可能重复的还有就是用生成文件的时间做文件名
    java.sql.Timestamp now = java.sql.Timestamp((new java.util.Date()).getTime());
    String fileName = now.toString();
    但如果两个文件同时生成,那还是会重复感觉最好的一个方法是将文件名存入数据库
    文件名就是文件的序列号,序列号主键、递增
    存文件时读数据库中最大的序列号,加1
    文件名就存这个序列号
    如果文件在同时生成,那由于主键值相同,会抛出异常
    确保文件名是唯一
      

  4.   

    java.sql.Timestamp now = java.sql.Timestamp((new java.util.Date()).getTime());
    漏了个new,不好意思
    java.sql.Timestamp now = new java.sql.Timestamp((new java.util.Date()).getTime());
      

  5.   

    上面的算法,假如你的系统时间被改了,是有可能重复的。
    GUID是这样产生的:机器CPU序列号+随机数+时间(以纳秒算)
    不过在JAVA中我还不知道如何获取CPU的信息。
    所以一个改进的算法是:随机产生(随机种子用时间)一串字符+时间,重复的机率极小。
      

  6.   

    long l = System.currentTimeMillis();
    Random rnd = new Random(l);for(int i = 0;i < 10;i++)
    {
        System.out.println(rnd.nextLong());
        rnd.setSeed(System.currentTimeMillis());
    }
    这样都不能保证产生的数不重复,看来得加上一段代码再产生随机字符串才行。
      

  7.   

    to  happyegg(快乐蛋):连续调用你的方法10次,看看结果如何?
      

  8.   

    呵呵,看来大家的讨论让我也发现了自己程序的不足,改进了一下算法,不过,系统时间的更改引起的重复仍然无可避免,机器CPU序列号+随机数+时间(以纳秒算)这样也不能百分百避免重复啊。前年虫问题引起的数据危机就是因为只用了两位年数而重复引起的。如果你的系统时间总是更改,那么这个系统......
    如果用数据库来唯一识别的话,可能要装很大量的数据,占用很多空间。
    public class Temp {
        private static int cnt = 0;
        public static synchronized String createtFileName() {
            createtFileName("txt");
        }
        public static synchronized String createtFileName(String ext) {
            if(ext==null)
                ext= "txt";
            java.util.Date dt = new java.util.Date(System.currentTimeMillis());
            SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String fileName= fmt.format(dt);
            cnt = (cnt+1) % 100; //You are free the set %100 to 1000,100000
            StringBuffer sBuf = new StringBuffer("0000").append(cnt);
            sBuf.delete(0,sBuf.length()-2); //Format length, the file name will be same length
            fileName = fileName + "_" + sBuf.toString() + "." + ext;
            return fileName;
        }
    }
    不过嘛,一个系统是不是会这么频繁的创建文件的吧:)
      

  9.   

    找一个UUID的生成器不就行了吗。
      

  10.   

    千万不要说“一般”怎么怎么样。如果你的系统要接受每天上万次的访问,任何“不一般”的事情都有可能发生,而且你将很难重现错误。UUID是理论上不会重复的唯一标记号,只要你的机器上有装网卡。