Files.createTempFile în Java

Creează un fișier gol, cu nume unic, în folderul temporar al sistemului sau într-un folder ales.

Sintaxă
static Path createTempFile(String prefix, String sufix, FileAttribute<?>... atribute) throws IOException
static Path createTempFile(Path folder, String prefix, String sufix, FileAttribute<?>... atribute) throws IOException

Ce face Files.createTempFile

Files.createTempFile("raport-", ".txt") creează un fișier gol cu un nume unic, de forma raport- + un număr aleatoriu + .txt, în folderul temporar al sistemului (proprietatea java.io.tmpdir). Numele nu se repetă, deci două programe nu se calcă pe picioare.

Varianta cu un Path la început creează fișierul în folderul dat. Dacă sufixul este null, se folosește .tmp. Fișierul nu se șterge singur: șterge-l cu Files.deleteIfExists când nu mai ai nevoie de el. Pentru foldere există Files.createTempDirectory.

Parametri

Parametru Descriere
folder Opțional: unde se creează fișierul.
prefix Începutul numelui (poate fi null).
sufix Sfârșitul numelui, de obicei extensia (null înseamnă .tmp).

Ce returnează

Calea fișierului nou creat.

Exemple

Exemplul 1: Fișier temporar cu nume unic

Numele exact diferă la fiecare rulare, așa că afișăm doar ce știm sigur: începutul, sfârșitul și că fișierul e gol.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) throws IOException {
        Path temp = Files.createTempFile("raport-", ".txt");
        String nume = temp.getFileName().toString();

        System.out.println("Începe cu raport-: " + nume.startsWith("raport-"));
        System.out.println("Se termină cu .txt: " + nume.endsWith(".txt"));
        System.out.println("Mărime: " + Files.size(temp));

        Files.writeString(temp, "Total vânzări: 3.400 lei");
        System.out.println(Files.readString(temp));
        System.out.println("Șters: " + Files.deleteIfExists(temp));
    }
}

Rezultat

Începe cu raport-: true
Se termină cu .txt: true
Mărime: 0
Total vânzări: 3.400 lei
Șters: true

Exemplul 2: Două fișiere temporare în folderul curent

Chiar cu același prefix, numele sunt diferite.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) throws IOException {
        Path aici = Path.of(".");
        Path a = Files.createTempFile(aici, "export-", ".csv");
        Path b = Files.createTempFile(aici, "export-", ".csv");

        System.out.println("Nume diferite: " + !a.getFileName().equals(b.getFileName()));
        System.out.println("Sunt în folderul curent: " + a.getParent().equals(aici));
        Files.delete(a);
        Files.delete(b);
    }
}

Rezultat

Nume diferite: true
Sunt în folderul curent: true

Greșeli frecvente

  • Crezi că fișierul temporar dispare singur la sfârșitul programului. Rămâne pe disc; șterge-l tu.
  • Construiești singur nume „unice” cu ora curentă. Două rulări în aceeași secundă dau același nume; createTempFile evită asta.

Comenzi înrudite

  • Files.delete: Șterge un fișier sau un folder gol; delete aruncă excepție dacă lipsește, deleteIfExists doar returnează false.
  • Files.writeString: Scrie un text într-un fișier (UTF-8): îl creează sau îl suprascrie; cu StandardOpenOption.APPEND adaugă la final.
  • Path.getFileName: getFileName dă ultimul nume din cale (fișierul), iar getParent calea fără ultimul nume (folderul care îl conține).
  • Files: Clasa cu metode statice pentru lucrul cu fișiere și foldere: citire, scriere, copiere, mutare, ștergere, listare.