Con questo codice vi spiego come poter copiare file o intere cartelle in Java dal momento che non esiste, che io sappia, una classe che lo faccia appositamente.
Essenziali per la riuscita del nostro codice sono FileInputStream e FileOutputStream, stream che ci permettono proprio di leggere il file dalla posizione originale e copiarlo in quella di destinazione.
Il codice è così organizzato: il costruttore gestisce i dati inseriti, quindi il file/cartella di origine e la destinazione attraverso controlli appositi che li reindirizzeranno verso le apposite funzioni.
La funzione leggo_i_file elabora tutti i file che saranno copiati: è utile specificare che all´interno della cartella possono essere presenti file ma anche altre cartelle che a loro volta possono contenere dei file che devono essere inviati insieme al resto.
Infine la copioFile(origine,destinazione), quella che ci interessa in particolar modo, è quella che gestisce la copia dei file. Passiamo subito al codice:
JAVA
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class copy {FileInputStream fis = null;FileOutputStream fos = null;public copy(String origine, String destinaz) throws IOException{File orig = new File(origine);File dest = new File(destinaz);//controllo che dest sia una cartella altrimenti chiudoif (dest.isFile()){System.out.println("**La destinazione deve essere una cartella");System.exit(0);}if (orig.isFile()){copioFile(orig,new File(dest+"\\"+orig.getName()));}else{String dir_path = dest + "\\";// copio i fileleggo_i_file(orig,dest,dir_path);}}File dir = null; // mi serve nel caso in cui ci sono cartelle in altre cartellepublic void leggo_i_file(File orig,File dest,String dir_path) throws IOException{// creo la cartelladir_path += orig.getName()+"\\";dir = new File(dir_path);if (!dir.exists()){System.out.println("La cartella non esiste, ne creo una nuova: "+dir);dir.mkdirs();}File [] lista = orig.listFiles();for(int y = 0; y < lista.length; y++){if (lista[y].isFile()){//invia FileSystem.out.println(lista[y]+": File, "+y);copioFile( lista[y] ,new File(dir+"\\"+lista[y].getName()));}else if (lista[y].isDirectory()){//ricorsioneleggo_i_file(lista[y],dest,dir_path);}}}public void copioFile(File orig, File dest) throws IOException{int letti = 0;long tot = 0;// inizializzo uno buffer di 4Kbbyte[] buffer = new byte[4096];// inizializzo stream per la copia del filetry {fis = new FileInputStream(orig);fos = new FileOutputStream(dest);} catch (FileNotFoundException e) {System.out.println("**C´è stato qualche problema con gli stream");System.exit(0);}System.out.println(orig+" , "+orig.length()+" byte ");while((letti = fis.read(buffer)) != -1){fos.write(buffer, 0, letti);tot += letti;}System.out.println("**File copiato. "+tot+"/"+orig.length()+" byte");// chiudo il file d´originefis.close();//chiudo il file di destinazionefos.close();}public static void main(String args[]) throws IOException{new copy("C:\\Users\\Prova\\Documents\\Battlefield 3","C:\\Users\\Prova\\Desktop");}}