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;
}
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;
}
解决方案 »
- 关于工厂方法的疑问
- javamail收新浪邮件问题
- Static方法的访问其它成员方法和成员属性的规则
- 求助!!! path 变量 不小心给改了!!!
- 我想在java程序中 间隔1秒触发一个事件 以实现动画效果 有点类似Delphi的定时器 应该如何实现?
- 问一极简单问题,在线等.(作业)
- 想学java,想问一下用那个开发环境比较好,随便推荐学java本好书
- 关于JAVAAPPLET的问题
- 在jbuider4中开发applet时,在其中run *.html没有结果是什么原因
- 懂英文的JAVA大神指点下
- jbuilder的gui designer 是如何做的?
- 怎么独立运行一个java程序,就象原生Windows程序那样?
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
文件名就存这个序列号
如果文件在同时生成,那由于主键值相同,会抛出异常
确保文件名是唯一
漏了个new,不好意思
java.sql.Timestamp now = new java.sql.Timestamp((new java.util.Date()).getTime());
GUID是这样产生的:机器CPU序列号+随机数+时间(以纳秒算)
不过在JAVA中我还不知道如何获取CPU的信息。
所以一个改进的算法是:随机产生(随机种子用时间)一串字符+时间,重复的机率极小。
Random rnd = new Random(l);for(int i = 0;i < 10;i++)
{
System.out.println(rnd.nextLong());
rnd.setSeed(System.currentTimeMillis());
}
这样都不能保证产生的数不重复,看来得加上一段代码再产生随机字符串才行。
如果用数据库来唯一识别的话,可能要装很大量的数据,占用很多空间。
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;
}
}
不过嘛,一个系统是不是会这么频繁的创建文件的吧:)