Files.delete în Java

Șterge un fișier sau un folder gol; delete aruncă excepție dacă lipsește, deleteIfExists doar returnează false.

Sintaxă
static void delete(Path cale) throws IOException
static boolean deleteIfExists(Path cale) throws IOException

Ce face Files.delete

Files.delete(cale) șterge definitiv fișierul (nu îl mută în coșul de gunoi). Dacă fișierul nu există aruncă NoSuchFileException; dacă este un folder care mai conține ceva, aruncă DirectoryNotEmptyException.

Files.deleteIfExists(cale) face același lucru, dar pentru un fișier lipsă returnează false în loc să arunce excepție. Returnează true dacă a șters ceva. Este potrivită pentru curățarea fișierelor temporare.

Pentru a șterge un folder cu tot conținutul, trebuie să ștergi întâi fișierele din el: cu Files.walk, sortat invers (cele mai adânci primele).

Parametri

Parametru Descriere
cale Fișierul sau folderul gol de șters.

Ce returnează

delete: nimic. deleteIfExists: true dacă a șters, false dacă nu exista.

Exemple

Exemplul 1: delete față de deleteIfExists

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

public class Main {
    public static void main(String[] args) throws IOException {
        Path temp = Path.of("temp.txt");
        Files.writeString(temp, "date temporare");

        Files.delete(temp);
        System.out.println("Șters. Există? " + Files.exists(temp));

        try {
            Files.delete(temp);
        } catch (NoSuchFileException e) {
            System.out.println("delete: fișierul nu există (" + e.getMessage() + ")");
        }
        System.out.println("deleteIfExists: " + Files.deleteIfExists(temp));
    }
}

Rezultat

Șters. Există? false
delete: fișierul nu există (temp.txt)
deleteIfExists: false

Exemplul 2: Un folder trebuie golit înainte

Prima încercare eșuează, pentru că folderul conține un fișier. Apoi ștergem tot, de la cel mai adânc element spre rădăcină.

import java.io.IOException;
import java.nio.file.DirectoryNotEmptyException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) throws IOException {
        Path cache = Path.of("cache");
        Files.createDirectories(cache.resolve("imagini"));
        Files.writeString(cache.resolve("imagini").resolve("logo.png"), "...");

        try {
            Files.delete(cache);
        } catch (DirectoryNotEmptyException e) {
            System.out.println("Folderul nu este gol: " + e.getMessage());
        }

        List<Path> toate;
        try (Stream<Path> s = Files.walk(cache)) {
            toate = s.sorted(Comparator.reverseOrder()).toList();
        }
        for (Path p : toate) {
            Files.delete(p);
            System.out.println("Șters: " + p);
        }
        System.out.println("cache există? " + Files.exists(cache));
    }
}

Rezultat

Folderul nu este gol: cache
Șters: cache/imagini/logo.png
Șters: cache/imagini
Șters: cache
cache există? false

Greșeli frecvente

  • Aștepți să găsești fișierul în coșul de gunoi. Files.delete șterge definitiv.
  • Ștergi un folder cu delete fără să-l golești: DirectoryNotEmptyException.
  • Ștergi un fișier încă deschis (de exemplu de un Files.lines neînchis). Pe Windows ștergerea eșuează.

Comenzi înrudite

  • Files.exists: Verifică dacă un fișier sau un folder există la calea dată; nu aruncă excepții.
  • Files.walk: Parcurge un folder cu tot ce conține, la orice adâncime, și dă toate căile ca Stream<Path>, începând cu folderul însuși.
  • File.mkdir: mkdir creează un folder, mkdirs și folderele părinte, delete șterge un fișier sau un folder gol; toate returnează true/false.
  • Files.createTempFile: Creează un fișier gol, cu nume unic, în folderul temporar al sistemului sau într-un folder ales.