Ce face File.copyTo
sursa.copyTo(File("copie.txt")) copiază conținutul și returnează fișierul nou. Dacă destinația există deja, aruncă FileAlreadyExistsException, ca să nu pierzi date din greșeală; cu overwrite = true o înlocuiește. Directoarele lipsă din calea destinației sunt create automat. Pentru un director întreg folosește copyRecursively.
deleteRecursively() șterge fișierul sau directorul împreună cu tot ce conține și returnează true dacă a reușit. Ștergerea este definitivă (nu trece prin Coșul de gunoi), deci verifică de două ori calea. Pentru un singur fișier sau un director gol ajunge delete().
Parametri
| Parametru | Descriere |
|---|---|
target |
Fișierul destinație. |
overwrite |
Dacă true, înlocuiește destinația existentă. |
Ce returnează
copyTo: fișierul destinație. deleteRecursively: true dacă totul a fost șters.
Exemple
Exemplul 1: Copie de siguranță
Copia se creează într-un director nou, creat automat. A doua copiere reușește doar cu overwrite = true.
import java.io.File
fun main() {
val original = File("contacte.txt")
original.writeText("Ana 0722111222\nIon 0744333444\n")
val copie = original.copyTo(File("backup/contacte.txt"))
println("Copiat în ${copie.path}: ${copie.readText().lines().size - 1} contacte")
try {
original.copyTo(copie)
} catch (e: FileAlreadyExistsException) {
println("Destinația există deja: ${e.other?.path}")
}
original.copyTo(copie, overwrite = true)
println("Suprascris: ${copie.exists()}")
}
Rezultat
Copiat în backup/contacte.txt: 2 contacte
Destinația există deja: backup/contacte.txt
Suprascris: true
Exemplul 2: Ștergerea unui director cu tot conținutul
delete() nu poate șterge un director care conține fișiere; deleteRecursively() poate.
import java.io.File
fun main() {
val dir = File("temporar")
File(dir, "a/b").mkdirs()
File(dir, "a/note.txt").writeText("ceva")
File(dir, "a/b/date.txt").writeText("altceva")
println("delete(): ${dir.delete()}")
println("deleteRecursively(): ${dir.deleteRecursively()}")
println("Mai există: ${dir.exists()}")
}
Rezultat
delete(): false
deleteRecursively(): true
Mai există: false
Exemplul 3: Copierea unui director întreg
copyRecursively copiază toate fișierele și subdirectoarele.
import java.io.File
fun main() {
File("proiect/src").mkdirs()
File("proiect/src/main.kt").writeText("fun main() {}")
File("proiect/README.md").writeText("# Proiect")
File("proiect").copyRecursively(File("proiect-copie"))
val fisiere = File("proiect-copie").walk().filter { it.isFile }.map { it.path }.sorted().toList()
println(fisiere)
}
Rezultat
[proiect-copie/README.md, proiect-copie/src/main.kt]
Greșeli frecvente
- Te aștepți ca
copyTosă suprascrie destinația. Implicit aruncă excepție; adaugăoverwrite = truedacă asta vrei. - Apelezi
deleteRecursively()pe o cale construită greșit (de exemplu un text gol, care înseamnă directorul curent). Afișează și verifică întâi calea.
Comenzi înrudite
File.walk: Parcurge un director cu toate subdirectoarele și fișierele lui, ca o secvență de obiecte File.File.readBytes: readBytes citește un fișier ca șir de octeți (ByteArray); writeBytes scrie octeți, pentru imagini, arhive sau date binare.File.extension: extension dă partea de după ultimul punct din numele fișierului; nameWithoutExtension dă numele fără ea.