如何在java中创建临时文件而不在文件名后附加随机数?

我需要创建一个临时文件,所以我尝试了这个:

String[] TempFiles = {"c1234c10","c1234c11","c1234c12","c1234c13"}; for (int i = 0; i <= 3; i++) { try { String tempFile = TempFiles[i]; File temp = File.createTempFile(tempFile, ".xls"); System.out.println("Temp file : " + temp.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } } 

输出是这样的:

  Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c108415816200650069233.xls Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c113748833645638701089.xls Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c126104766829220422260.xls Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c137493179265536640669.xls 

现在,我不希望将额外的数字(long int)添加到文件名中。 我怎样才能做到这一点? 谢谢

首先,使用以下代码段获取系统的临时目录:

 String tDir = System.getProperty("java.io.tmpdir"); 

然后将tDir变量与tempFiles[]数组结合使用,以单独创建每个文件。

如果使用File.createTempFile生成临时文件名,则不能。 我查看了生成临时文件的java源代码(对于java 1.7,你没有说明你的版本,所以我只使用了我的版本):

 private static class TempDirectory { private TempDirectory() { } // temporary directory location private static final File tmpdir = new File(fs.normalize(AccessController .doPrivileged(new GetPropertyAction("java.io.tmpdir")))); static File location() { return tmpdir; } // file name generation private static final SecureRandom random = new SecureRandom(); static File generateFile(String prefix, String suffix, File dir) { long n = random.nextLong(); if (n == Long.MIN_VALUE) { n = 0; // corner case } else { n = Math.abs(n); } return new File(dir, prefix + Long.toString(n) + suffix); } } 

这是生成临时文件名的java JDK中的代码。 您可以看到它生成一个随机数,并将其插入到前缀和后缀之间的文件名中。 这是在“File.java”中(在java.io中)。 我没有看到任何改变它的方法。

使用番石榴 :

 import com.google.common.io.Files; ... File myTempFile = new File(Files.createTempDir(), "MySpecificName.png"); 

如果您希望在系统范围的临时目录中创建具有特定名称的文件,则展开%temp%环境变量并手动创建该文件,没有任何问题。

编辑:实际上,使用System.getProperty("java.io.tmpdir")); 为了那个原因。

自定义名称可以保存如下

 File temp=new File(tempFile, ".xls"); if (!temp.exists()) { temp.createNewFile(); } 

您可以创建临时目录,然后在其中存储新文件。 这样,您添加的所有新文件都不会随机扩展。 完成后,您只需删除添加的临时目录即可。

 public static File createTempFile(String prefix, String suffix) { File parent = new File(System.getProperty("java.io.tmpdir")); File temp = new File(parent, prefix + suffix); if (temp.exists()) { temp.delete(); } try { temp.createNewFile(); } catch (IOException ex) { ex.printStackTrace(); } return temp; } public static File createTempDirectory(String fileName) { File parent = new File(System.getProperty("java.io.tmpdir")); File temp = new File(parent, fileName); if (temp.exists()) { temp.delete(); } temp.mkdir(); return temp; } 
 public static File createTempDirectory(String dirName) { File baseDir = new File(System.getProperty("java.io.tmpdir")); File tempDir = new File(baseDir, dirName); if (tempDir.mkdir()) { return tempDir; } return null; }