Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
控制在Java中创建的临时文件的名称_Java_File - Fatal编程技术网

控制在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提供的解决方案,按照您的建议在临时目录中原子地创建了一个文件。非常感谢。