java随机生成文件名,怎么不重复
解决方案 »
- 如何通过http上传多张图片及文字?
- 连接查询两张表方法怎么写呀?
- JAVA搜索域服务器的结果只有1000个!!急求解.
- hiberante异常:Unexpected row count: 0 expected: 1, 请教
- 如何将数据库A的某些表中的内容复制到另外一个数据库B中去
- 在weblogic中怎么配制soap服务?
- 这个错误是什么意思??
- html:select (struts方面的问题)
- java调用dll出现了错误
- freemarker 的ftl 模板生成 word 显示图片
- 我的JSP只能通过ACTION访问?
- 求救!!在整合struts和spring是为什么老是出现NullPointerException??
最好生成文件名后在判断一次是否存在,存在则重新生成。
public class RandomStringUtil { public static String getString(int length){
char[] charArray = new char[length];
for(int i=0;i<length;i++){
Random r = new Random();
int n = r.nextInt(123);
while(n<48 || (n>57 && n<65) || (n>90 && n <97) || n>122){//(!((n>=48 && n<=57) || (n>=65 && n<=90) && (n>=97 && n<=122))){
n = r.nextInt(123);
}
charArray[i] = (char)n ;
}
return String.valueOf(charArray) ;
}
}
private String generateFileName() {
// 获得当前时间
DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
// 转换为字符串
String formatDate = format.format(new Date());
// 随机生成文件编号
int random = new Random().nextInt(10000);
return new StringBuffer().append(formatDate).append(
random).toString();
}
* @author troy(J2EE)
* @version 1.0
*/
import java.util.UUID;
public class Test
{
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println(uuid);
}
}
方法二(推荐)
文件名后面加个时间戳
/**
* @author troy(J2EE)
* @version 1.0
*/
import java.util.Date;
public class Test
{
public static void main(String[] args) {
String fielName = String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %1$tL",new Date())+".txt";
System.out.println(fielName);
}
}其他诸如使用集合set,for循环判断重复的就不推荐了
String str[] = { "a", "b", "c", "d", "e", "f", "g",
"h", "i", "j" };
Random tmp = new Random();
fileName = System.currentTimeMillis()
+ str[tmp.nextInt(10)] + "." + fileType;
我也用这个,不过它有36位.比较长.
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddkkmmss");
String filename = "文件名" + sdf.format(date) + "文件名的后缀";
这样 就永远不会重复了.
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmssSSS");
String[] temp=new String[]{"a","b"....."z","1"......"9"}String result=null;Random rand=new Random();for(int i=0;i<temp.length;i++){
int j=rand.nextInt((26+9));
String str+=temp[j];
result=str;
}
以前一直是时间加个随机数的方式去做。
除非你非要更改时间
别random
一百万次或者一百万亿次总会重复的
时间肯定不重复
System.getCurrentTime()不是很好的嘛
System.currentTimeMillis();//long型数据,就这么简单
呵呵,参考,不行还有纳秒值,一般一行最简单的代码执行也要很多纳秒呢,呵呵。
有点恶心,几万个或者几百万个之后还不判断死了。
2. 用时间+随机数,只要时间足够精确,而且是获取的真实时间,不是OS系统里的时间。
这种方法也挺不爽。。 要求必须是实际时间。而且整个随机数是一半伪随机的一半是有规律性的(时间是递增的),另外,也无法保证两个对象同时刻运行时不产生相同的数!
3. 用UUID。 这种方法能保证万无一失。 虽然有点耗时间。 但毕竟是别人已经总结好的非常成熟的算法,com中用到的id值能够保证时间与空间上的绝对唯一性。 我想JAVA的uuid也是可以保证的。世界上任意两个地方在任何时间永远不可能产生同一个数。 如果你的系统要保证绝对的可靠这种方法可行。
UUID.randomUUID()
}
import java.io.File;/**
* JAVA生成不重复的临时文件的方法。
*
* @author JAVA世纪网(java2000.net)
*/
public class Test {
public static void main(String[] args) throws Exception {
File f = File.createTempFile("test", "file");
//
// C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\test3654095372928367563file
System.out.println(f.getAbsolutePath());
f.deleteOnExit();
}
}
前面诸位说的用时间的毫秒数也可以,不过注意一点,也需要加上线程同步。不然有可能2个线程得到同一个值
long time = System.nanoTime();
将文件重命名fileName.renameTo(time + fileName);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmssSSS");
rstring = RandomStringUtil.getString(6);很少重复,可以调整参数,那样重复的几率就几乎不存在了。
最好生成文件名后在判断一次是否存在,存在则重新生成。
String fileName = uuid.toString();
String result="";
StringBuffer sb=new StringBuffer();
sb.append(toString(new java.util.Date(),"yyyyMMddhhmmssSSS"));
sb.append(getRandomString(8));
ext=toNotNull(ext,".jpg").trim();
if(!ext.equals("")){
if(!ext.startsWith(".")){
sb.append('.');
}
sb.append(ext);
}
result=sb.toString();
return result;
} public static final String getRandomString(int length) {
if (length < 1) {
return null;
}
char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
.toCharArray(); java.util.Random randGen = new java.util.Random(); char[] randBuffer = new char[length];
for (int i = 0; i < randBuffer.length; i++) {
randBuffer[i] = numbersAndLetters[randGen.nextInt(61)];
}
return new String(randBuffer);
}
java.text.SimpleDateFormat simpleDate = new java.text.SimpleDateFormat(
format);
String temp = simpleDate.format(v);
simpleDate = null;
return temp;
}