PDA

View Full Version : [Java] Equivalente di "copyTo" in Java 1.6 per copiare dei files


ferro986
15-02-2011, 10:51
Ciao a tutti!

Sto facendo un programma che backuppa files e cartelle.

Cercavo un metodo che copi da un path a un altro
Nella docuentazione ufficiale di Java, il tutto è ben spiegato:
http://download.oracle.com/javase/tutorial/essential/io/copy.html

C'è un COMODISSIMO METODO copyTo, che in una sola istruzione copia quello che vuoi:
http://download.java.net/jdk7/docs/api/java/nio/file/Path.html#copyTo%28java.nio.file.Path,%20java.nio.file.CopyOption...%29

Esempio:

import static java.nio.file.StandardCopyOption.*;
...
try {
path.copyTo(newPath, REPLACE_EXISTING, COPY_ATTRIBUTES);
} catch (IOException x) {
//Logic for error condition...
System.err.println(x);
return;
}


Peccato che....
Questo metodo sia stato introdotto con Java 1.7 (e in ditta dobbiam tenere compatibilità con java 1.6)


La mia domanda si potrebbe così riformulare:
Esiste in java 1.6 un equivalente del metodo copyTo di Java 1.7 per copiare dei files e cartelle??



Se proprio non lo trovo dovrò mettermi a leggere a mano da un file su un buffer, e scrivere sull'altro, ma preferivo evitarlo:
Quando possibile è sempre meglio usare delle API esistenti, piuttosto che reinventarsi la ruota, inoltre, ciò che è implementato nelle api di un linguaggio come java funziona spesso meglio di ciò che fai tu a mano.

gokan
15-02-2011, 14:08
Ciao, non esiste un vero e proprio comando di copia nelle versioni precedenti alla 7 :)
Credo che tu lo debba fare a manella (qui alcuni spunti http://forums.techarena.in/software-development/1130179.htm)
Effettivamente è una cosa molto strana.

ferro986
15-02-2011, 14:37
I miei complimenti!:

Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer




Comunque ora ho trovato!
Ci sono le librerie open source "FileUtils" del progetto Apache che fanno al caso mio:
http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html
(basta Java 1.5 per supportarle)

Mio esempio:

private void copiaFile(String pathSorgente, String pathDestinazione){
File fileSorg = new File(pathSorgente);
File fileDest = new File(pathDestinazione);

try {
FileUtils.copyFile(fileSorg, fileDest);
} catch (IOException e) { e.printStackTrace(); }
//Non devo fare close perchè il file non l'ho aperto, ci pensa lui ad aprir e chiudere

Cout.println("File copiato");
}

C'è anche il metodo per cartelle e sottocartelle



Mo ho un altro problema:
Ci sarà modo di fare la stessa cosa zippando i files?

Per zipparli alla bruta (scrivendo tutto il codice a mano) c'è l'apposita documentazione:
http://java.sun.com/developer/technicalArticles/Programming/compression/


Esistono librerie per Java che zippano dei file e delle cartelle con una singola istruzione?


......


Forse stiamo andando un pò fuori tema, magari apro un'altra discussione a riguardo