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
deletefără să-l golești:DirectoryNotEmptyException. - Ștergi un fișier încă deschis (de exemplu de un
Files.linesneî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.