Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Во-первых, используйте следующий фрагмент, чтобы получить системный каталог temp:

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

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

Ответ 2

Вы не можете, если используете 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, который генерирует имя файла temp. Вы можете видеть, что он генерирует случайное число и вставляет его в ваше имя файла между вашим префиксом и суффиксом. Это в "File.java" (в java.io). Я не видел никакого способа изменить это.

Ответ 3

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

Изменить: на самом деле используйте System.getProperty("java.io.tmpdir")); для этого.

Ответ 4

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

import com.google.common.io.Files;

...

File myTempFile = new File(Files.createTempDir(), "MySpecificName.png");

Ответ 5

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

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

Ответ 6

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

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;
}