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 chiudo
if (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 file
leggo_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 cartella
dir_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 File
System.out.println(lista[y]+": File, "+y);copioFile( lista[y] ,new File(dir+"\\"+lista[y].getName()));}
else if (lista[y].isDirectory()){
//ricorsione
leggo_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 4Kb
byte[] buffer = new byte[4096];// inizializzo stream per la copia del file
try {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´origine
fis.close();//chiudo il file di destinazione
fos.close();}
public static void main(String args[]) throws IOException{
new copy("C:\\Users\\Prova\\Documents\\Battlefield 3","C:\\Users\\Prova\\Desktop");}
}