Ce face Files.move
Files.move(sursa, destinatie) mută fișierul la noua cale. Dacă destinația este în același folder, operația este de fapt o redenumire. După mutare, sursa nu mai există.
Dacă destinația există, aruncă FileAlreadyExistsException; cu StandardCopyOption.REPLACE_EXISTING o înlocuiește. Opțiunea ATOMIC_MOVE cere ca mutarea să fie „totul sau nimic”, util când alt program citește fișierul în același timp.
Un folder întreg se poate muta sau redenumi pe același disc. Mutarea unui folder cu conținut pe alt disc nu este posibilă dintr-o singură apelare.
Parametri
| Parametru | Descriere |
|---|---|
sursa |
Fișierul sau folderul mutat. |
destinatie |
Noua cale, inclusiv noul nume. |
optiuni |
Opțional: REPLACE_EXISTING, ATOMIC_MOVE. |
Ce returnează
Calea destinației.
Exemple
Exemplul 1: Redenumire și mutare într-un folder
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 ciorna = Path.of("ciorna.txt");
Files.writeString(ciorna, "Cerere de concediu - Ana Popescu");
Path cerere = Files.move(ciorna, Path.of("cerere.txt"));
System.out.println("ciorna.txt există? " + Files.exists(ciorna));
System.out.println("cerere.txt există? " + Files.exists(cerere));
Path trimise = Files.createDirectory(Path.of("trimise"));
Path laDestinatie = Files.move(cerere, trimise.resolve(cerere.getFileName()));
System.out.println("Acum la: " + laDestinatie);
System.out.println(Files.readString(laDestinatie));
}
}
Rezultat
ciorna.txt există? false
cerere.txt există? true
Acum la: trimise/cerere.txt
Cerere de concediu - Ana Popescu
Exemplul 2: Înlocuirea unui fișier existent
Scriem întâi într-un fișier temporar, apoi îl mutăm peste cel vechi. Așa fișierul final nu rămâne pe jumătate scris dacă programul se oprește brusc.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class Main {
public static void main(String[] args) throws IOException {
Path stoc = Path.of("stoc.txt");
Files.writeString(stoc, "mere=10\n");
Path nou = Path.of("stoc.txt.tmp");
Files.writeString(nou, "mere=7\npere=3\n");
Files.move(nou, stoc, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.ATOMIC_MOVE);
System.out.print(Files.readString(stoc));
System.out.println("Temporar rămas? " + Files.exists(nou));
}
}
Rezultat
mere=7
pere=3
Temporar rămas? false
Greșeli frecvente
- Te aștepți ca
movesă facă o copie. Sursa dispare. - Dai ca destinație doar folderul: Java încearcă să înlocuiască folderul cu fișierul. Adaugă numele:
folder.resolve(fisier.getFileName()).
Comenzi înrudite
Files.copy: Copiază un fișier în altă locație; cu StandardCopyOption.REPLACE_EXISTING suprascrie destinația dacă există.Files.delete: Șterge un fișier sau un folder gol; delete aruncă excepție dacă lipsește, deleteIfExists doar returnează false.Path.getFileName: getFileName dă ultimul nume din cale (fișierul), iar getParent calea fără ultimul nume (folderul care îl conține).Path.resolve: Adaugă o cale la sfârșitul altei căi: folder.resolve(„note.txt”) dă folder/note.txt.