Lavorare con i file
Spesso ci tocca analizzare una directory o vedere tutti i file che hanno una determinata estensione, come copiare, spostare ed eliminare file.
Listare file
Per listare dei file, intendiamo data una directory avere tutti i nomi dei file da essa contenuta. Vediamo tre esempi, con tre funzioni diverse:
list() ritorna un array di String, e quindi stampa solo il nome dei file;
listFiles() ritorna un array di File, e quindi è possibile accedere a tutte le varie funzioni e proprietà di un oggetto File;
walk() che produce un FileTreeWalk, e lista i file in maniera ricorsiva; ci sono anche le funzioni walkBottomUp() e walkTopDown(), che si differenziano solo per il verso un cui eseguono la scansione.
Ecco qua il codice:
import java.io.File
fun main(args: Array<String>) {
File("/tmp").list().forEach { println(it) }
File("/tmp").listFiles().forEach { println(it) }
File("/tmp").walk().forEach { println(it) }
}
Ovviamente, all'interno del forEach{}, potete svolgere tutte le operazioni che volete.
Copiare un file
Per copiare file, Kotlin mette a disposizione una funzione apposita: File.copyTo(). La funzione accetta tre parametri, di cui solo il primo è obbligatorio, vedremo il perché nella prossima lezione:
- Il File di destinazione;
- Se sovrascrivere il file di destinazione nel caso in cui già esista;
- Avendo impostato a false il secondo parametro, nel caso in cui il file di destinazione già esista, otterremo una eccezione (kotlin.io.FileAlreadyExistsException). Starà a noi, eventualmente, intercettarla e agire di conseguenza.
- Se invece impostiamo il parametro a true, il file verrà semplicemente sovrascritto.
- La dimensione del buffer.
Vediamo un esempio:
val fileFrom: String = "original.doc"
val fileTo: String = "copy.doc"
File(fileFrom).copyTo(File(fileTo), false)
Spostare un file
Per spostare un file, Kotlin, in maniera del tutto simile alla copia, mette a disposizione una funzione apposita: File.renameTo(). La funzione accetta un unico parametro: il File di destinazione. Ritorna true o false in base al successo dell'operazione.
Vediamo un esempio:
val fileFrom: String = "original.doc"
val fileTo: String = "copy.doc"
File(fileFrom).renameTO(File(fileTo))
Eliminare un file
La cancellazione dei file in Kotlin, consiste in una riga di codice usando la funzione File.delete().
Questa funzione non cancella le directory, e ritorna true/false a seconda che l'operazione è avvenuta con successo o no.
Vediamo un esempio:
File("test.txt").delete()
Se volessimo cancellare una intera directory in maniera ricorsiva, abbiamo una funzione apposita:
File("test").deleteRecursively()
Tenete, però, presente che questa cancellerà tutto; e che in caso di errore a metà operazione, non è previsto un rollback. Cioè, tutto quello che è già stato cancellato, rimarrà cancellato. Quindi state attenti ad usare questa funzione.