Как создать временный файл в Java без случайного числа, добавленного к имени файла? - PullRequest
32 голосов
/ 07 марта 2012

Мне нужно создать временный файл, поэтому я попробовал это:

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), которое добавляется к имени файла.Как я могу этого достичь?Спасибо

Ответы [ 7 ]

36 голосов
/ 07 марта 2012

Сначала используйте следующий фрагмент для получения системного временного каталога:

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

Затем используйте переменную tDir вместе с вашим массивом tempFiles[] для создания каждого файла по отдельности.

17 голосов
/ 07 марта 2012

Вы не можете, если вы используете 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). Я не видел никакого способа изменить это.

11 голосов
/ 05 июля 2014

Использование Гуава :

import com.google.common.io.Files;

...

File myTempFile = new File(Files.createTempDir(), "MySpecificName.png");
4 голосов
/ 07 марта 2012

Если вы хотите, чтобы файлы с определенными именами создавались во системном временном каталоге, разверните переменную среды %temp% и создайте файл вручную, ничего страшного в этом нет.

Редактировать: На самом деле, используйте System.getProperty("java.io.tmpdir")); для этого.

1 голос
/ 01 марта 2017

Вы можете создать временный каталог, а затем хранить в нем новые файлы.Таким образом, все новые добавляемые вами файлы не будут иметь случайного расширения.Когда вы закончите, все, что вам нужно сделать, это удалить временный каталог, который вы добавили.

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;
}
1 голос
/ 11 ноября 2013

Пользовательские имена могут быть сохранены следующим образом

File temp=new File(tempFile, ".xls");
if (!temp.exists()) {
    temp.createNewFile();
}
0 голосов
/ 08 марта 2018
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;
}
...