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

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

public String getUniqueFileName(String directory, String extension) { //create unique file name } 

根据您的问题,我假设您已经看到File.createTempFile()始终创建一个文件,而不仅仅是允许您生成名称。

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

 File f = File.createTempFile("prefix",null,myDir); String filename = f.getName(); f.delete(); 

在文件名中使用时间戳?

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

例如:

 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(); } 

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

您可以尝试使用GUID作为文件名。

另一个版本,

简化了其他答案, 使用GUID 。 imho无需向UUID添加 。 这就是我正在使用的:

 public static String getUniqueFileName(String directory, String extension) { String fileName = MessageFormat.format("{0}.{1}", UUID.randomUUID(), extension.trim()); return Paths.get(directory, fileName).toString(); } 
  • 请注意,该文件未创建,此函数只返回一个唯一的文件名作为字符串

用法:

 String uniqueFileName = getUniqueFileName("/tmp", "pdf"); System.out.println(uniqueFileName); 

产量

 /tmp/f34a960a-6001-44d6-9aa7-93ec6647a64a.pdf 

您可以创建具有任何名称(时间,GUID等)的文件,然后对其进行测试以查看它是否已存在。 如果是,请尝试其他名称以查看它是否唯一。

 File f = new File(guid); if (f.exists()) { //try another guid }else{ //you're good to go } 

您可以创建一个实际的唯一目录(子目录),然后其中的任何文件都应该是唯一的,例如“myFile”。 +扩展名

  public static String getUniqueFileName(String directory, String extension) { try { // create actual unique subdirectory in the given directory // File myUniqueDir = File.createTempFile("udir", null,directory); String filename = myUniqueDir.getName(); myUniqueDir.delete (); // don't want the file but a directory myUniqueDir.mkdirs (); } //todo: catch .... // for example: return directory + "/" + myUniqueDir + "/myFile." + extension; } 

即使使用并发,此过程也应该在正常情况下工作。 除非我们开始考虑想要占用我们的新目录或类似事物的嗅探器进程。