如何创建tmp文件名而不创建文件

Mic*_*ber 28 java file-io file

我使用SWT在Java中编写应用程序.我想创建唯一的文件名.但我不想在硬盘上创建它.附加功能:我想在指定文件夹中创建唯一的文件名.

public String getUniqueFileName(String directory, String extension) {
        //create unique file name   
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ebb 13

从你的问题我假设你已经看到File.createTempFile()总是创建一个文件,而不仅仅是允许你生成名称.

但为什么不调用该方法然后删除创建的临时文件? createTempFile()完成了在指定目录中查找唯一文件名的所有工作,并且由于您创建了该文件,因此您可以确定也将删除它.

File f = File.createTempFile("prefix",null,myDir);
String filename = f.getName();
f.delete();
Run Code Online (Sandbox Code Playgroud)

  • @Dave:在`f.delete()之后,文件名不再保证是唯一的.在删除`createTempFile()`创建的文件之后,文件系统上会出现另一个具有相同名称的文件. (14认同)

Ric*_*ler 6

在文件名中使用时间戳?

当然,如果您具有非常高的并发性,这可能不起作用.

例如:

public String getUniqueFileName(String directory, String extension) {
    return new File(directory, new StringBuilder().append("prefix")
        .append(date.getTime()).append(UUID.randomUUID())
        .append(".").append(extension).toString()).getAbsolutePath();
}
Run Code Online (Sandbox Code Playgroud)

正如John Oxley的回答所示.UUID可能是一种解决方案,因为您可以使用4种不同的方案来创建它们.虽然碰撞的可能性很小.如果将时间戳与随机UUID组合在一起,则任何冲突的可能性都会变得非常小.