我不一定想使用UUID,因为它们相当长.
该文件只需要在其目录中是唯一的.
想到的一个想法是使用File.createTempFile(String prefix, String suffix)
,但这似乎是错误的,因为该文件不是临时的.
需要处理在相同毫秒内创建的两个文件的情况.
Pes*_*sto 87
好吧,你可以使用3参数版本:File.createTempFile(String prefix, String suffix, File directory)
它可以让你把它放在你想要的地方.除非你告诉它,否则Java不会以不同于任何其他文件的方式对待它.唯一的缺点是文件名保证长度至少为8个字符(前缀最少3个字符,加上函数生成的5个或更多字符).
如果这对你来说太长了,我想你总是可以从文件名"a"开始,然后循环"b","c"等,直到找到一个尚不存在的文件.
Tom*_*icz 27
我使用Apache Commons Lang库(http://commons.apache.org/lang).
有一个类org.apache.commons.lang.RandomStringUtils
可用于生成给定长度的随机字符串.非常方便,不仅用于文件名生成!
这是一个例子:
String ext = "dat";
File dir = new File("/home/pregzt");
String name = String.format("%s.%s", RandomStringUtils.randomAlphanumeric(8), ext);
File file = new File(dir, name);
Run Code Online (Sandbox Code Playgroud)
Osc*_*Ryz 12
我使用时间戳
即
new File( simpleDateFormat.format( new Date() ) );
Run Code Online (Sandbox Code Playgroud)
并将simpleDateFormat初始化为如下:
new SimpleDateFormat("File-ddMMyy-hhmmss.SSS.txt");
Run Code Online (Sandbox Code Playgroud)
编辑
关于什么
new File(String.format("%s.%s", sdf.format( new Date() ),
random.nextInt(9)));
Run Code Online (Sandbox Code Playgroud)
除非在同一秒内创建的文件数太多.
如果是这样的话,名称并不重要
new File( "file."+count++ );
Run Code Online (Sandbox Code Playgroud)
:P
MD.*_*med 10
这对我有用:
String generateUniqueFileName() {
String filename = "";
long millis = System.currentTimeMillis();
String datetime = new Date().toGMTString();
datetime = datetime.replace(" ", "");
datetime = datetime.replace(":", "");
String rndchars = RandomStringUtils.randomAlphanumeric(16);
filename = rndchars + "_" + datetime + "_" + millis;
return filename;
}
Run Code Online (Sandbox Code Playgroud)
// USE:
String newFile;
do{
newFile=generateUniqueFileName() + "." + FileExt;
}
while(new File(basePath+newFile).exists());
Run Code Online (Sandbox Code Playgroud)
输出文件名应如下所示:
2OoBwH8OwYGKW2QE_4Sep2013061732GMT_1378275452253.Ext
Run Code Online (Sandbox Code Playgroud)
查看File javadoc,createNewFile方法只有在文件不存在时才会创建文件,并返回一个布尔值来说明文件是否已创建.
您还可以使用exists()方法:
int i = 0;
String filename = Integer.toString(i);
File f = new File(filename);
while (f.exists()) {
i++;
filename = Integer.toString(i);
f = new File(filename);
}
f.createNewFile();
System.out.println("File in use: " + f);
Run Code Online (Sandbox Code Playgroud)
如果您有权访问数据库,则可以在文件名中创建和使用序列.
select mySequence.nextval from dual;
Run Code Online (Sandbox Code Playgroud)
它将保证是独一无二的,不应该太大(除非你抽出大量的文件).