控制在Java中创建的临时文件的名称
在创建临时文件时,是否有任何方法可以控制附加到文件名的随机数字?控制在Java中创建的临时文件的名称,java,file,Java,File,在创建临时文件时,是否有任何方法可以控制附加到文件名的随机数字? 例如,如果我写File.createTempFile(“abc”,“.pdf”),它将创建一个名为abc12323543121.pdf的文件。是否可以附加时间戳而不是这些数字?我需要这个,因为对于我创建的每个文件,我都需要在文件中附加时间戳,这使得文件名相当长。因此,如果我可以使用时间戳,而不是随机生成的数字,那将非常棒。您可以创建自己的实用程序方法来创建临时文件。基本上,临时文件存储在临时目录中,如下所示: public Fil
例如,如果我写
File.createTempFile(“abc”,“.pdf”)
,它将创建一个名为abc12323543121.pdf
的文件。是否可以附加时间戳而不是这些数字?我需要这个,因为对于我创建的每个文件,我都需要在文件中附加时间戳,这使得文件名相当长。因此,如果我可以使用时间戳,而不是随机生成的数字,那将非常棒。您可以创建自己的实用程序方法来创建临时文件。基本上,临时文件存储在临时目录中,如下所示:
public File createTempFile(String prefix, String suffix){
String tempDir = System.getProperty("java.io.tmpdir");
String fileName = (prefix != null ? prefix : "" ) + System.nanoTime() + (suffix != null ? suffix : "" ) ;
return new File(tempDir, fileName);
}
API似乎没有直接提供这一点。但是您可以查看
File.createTempFile()
源代码,看看它是如何实现的,然后自己实现所需的方法
基本上,createTempFile()
创建一个具有预期文件名的File
对象,然后使用FileSystem.createFileExclusive()
创建文件。如果文件已经存在,则此方法返回false
,在这种情况下,将修改文件名(使用不同的随机数)并重试创建
您可以遵循相同的方法,但请注意,
FileSystem
是一个包私有类,因此您不能在自己的方法中使用它。改为使用以原子方式创建文件。如果文件已经存在,此方法也会返回false
,因此您可以在类似的循环中使用它,如createTempFile()
使用createFileExclusive()
方法。是否有理由将文件创建为临时文件而不是正常方式?这样,您就可以完全控制它们的名称。createTempFile()
负责使此文件名唯一,即使您在一秒钟内调用它1000次。它必须能够添加一些前缀或后缀。@Philipp我最终以正常方式实现了它,但在system temp目录中,它或多或少类似于createTempFile方法,但是对随机命名有了更多的控制。我已经实现了我自己的方法,根据两个答案的输入在临时目录中创建一个新文件。谢谢。我使用了Andreas提供的解决方案,按照您的建议在临时目录中原子地创建了一个文件。非常感谢。