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

RT_*_*RT_ 33 java temporary-files

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

 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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*nto 37

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

String tDir = System.getProperty("java.io.tmpdir");
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,如果您这样做,则不使用File.createTempFile,而是使用其他一些方法来创建文件. (5认同)
  • 退出后是否会自动删除所有这些手动创建的文件?(我假设如此,但只是为了确保,如果有人可以确认). (4认同)

jmq*_*jmq 17

如果您使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Bra*_*son 11

使用番石榴:

import com.google.common.io.Files;

...

File myTempFile = new File(Files.createTempDir(), "MySpecificName.png");
Run Code Online (Sandbox Code Playgroud)

  • 看来这已被弃用。Guava 现在建议使用 java.nio.file.Files 创建 tmp 目录。有关详细信息,请参阅[此处](https://guava.dev/releases/snapshot-jre/api/docs/com/google/common/io/Files.html#createTempDir())。 (2认同)

Irf*_*rfy 5

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

编辑:实际上,System.getProperty("java.io.tmpdir"));用于那个。