Massimo Caliman
Massimo Caliman
~1 min read

Categories

  • java

Tags

  • Java

Languages

  • Italian

Parte della disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov, Il vento è cambiato, 1983)

Effettuare una copia di file con Java poteva essere ritenuto pedante fino a qualche anno fa. A volte ci dimentichiamo dell’esistenza del nuovo package nio. Qualcuno potrebbe obbiettare che oggi con Java7 (ed ovviamente 8) è possibile usare la classe Files che espone il metodo copy ancora più semplice. Per chi non potesse utilizzarlo una soluzione performante e semplice è riportata sotto. Provate ad effettuare qualche test per verirficare le performance con i metodi classici basati su Stream e potrete apprezzare i vantaggi dei channel sopratutto se lavorate con file di dimensioni non trascurabili.

private static void copy(File source, File destination) {
    FileChannel input = null;
    FileChannel output = null;
    try {
        input = new FileInputStream(source).getChannel();
        output = new FileOutputStream(destination).getChannel();
        output.transferFrom(input, 0, input.size());
        input.close();
        output.close();
    } catch (IOException e) {
        logger.log(Level.SEVERE, "", e);
    }
}