Antes de comenzar recuerdo a los usuarios de windows cambiar el "/" por "\\"
Comencemos por la función main() que llama al método recursivo
public static int EntraIncial=0;
public static void main(String[] args) {
//Fichero desde el cual se van a copiar los datos
File FOrigen=new File("/home/luis/FRUTAS");
//Fichero donde se van a copiar los datos
File FDestino=new File("/home/luis/XXX");
Copiar(FOrigen,FDestino);
EntraIncial=0;
}
/* Método que copia completamente una carpeta usando recursividad
*PARAMETRO1:FOrigen:Fichero o carpeta que se desea copiar
*PARAMETRO2:FDestino:Carpeta destino
*/
public static void Copiar(File FOrigen,File FDestino){
//si el origen no es una carpeta
if(!FOrigen.isDirectory()){
//Llamo la funcion que lo copia
CopiarFichero(FOrigen,FDestino);
}else{
//incremento el contador de entradas a esta función
EntraIncial++;
//solo se entra acá cuando se quiera copiar una carpeta y
//sea la primera es decir la carpeta padre
if(EntraIncial==1){
//Cambio la ruta destino por el nombre que tenia mas el nombre de
//la carpeta padre
FDestino=new File(FDestino.getAbsolutePath()+"/"+FOrigen.getName());
//si la carpeta no existe la creo
if(!FDestino.exists()){
FDestino.mkdir();
}
}
//obtengo el nombre de todos los archivos y carpetas que
//pertenecen a este fichero(FOrigen)
String []Rutas=FOrigen.list();
//recorro uno a uno el contenido de la carpeta
/*IMPORTANTE:EL HML SE DESCONFIGURA Y NO ME DEJA
PORNE LA LINEA FOR SIGUIENTE BIEN, TENGO PROBLEMA
CON EL SIGNO MENOR.SI UD LE PASA LO MISMO DESCARGE EL
PROGRAMA CON EL LINK DE ABAJO Y VÉALO DE FORMA SEGURA
*/
for(int i=0;i<Rutas.length;i++){
//establezco el nombre del nuevo archivo origen
File FnueOri=new File(FOrigen.getAbsolutePath()+"/"+Rutas[i]);
//establezco el nombre del nuevo archivo destino
File FnueDest= new File(FDestino.getAbsolutePath()+"/"+Rutas[i]);
//si no existe el archivo destino lo creo
if(FnueOri.isDirectory() && !FnueDest.exists()){
FnueDest.mkdir();
}
//uso recursividad y llamo a esta misma funcion has llegar
//al ultimo elemento
Copiar(FnueOri,FnueDest);
}
}
}
/*Funcio que copia un fichero
*PARAMETRO1:FOrigen:Fichero o carpeta que se desea copiar
*PARAMETRO2:FDestino:Carpeta destino
*/
public static void CopiarFichero(File FOrigen,File FDestino){
try {
//Si el archivo a copiar existe
if(FOrigen.exists()){
String copiar="S";
//si el fichero destino ya existe
if(FDestino.exists()){
System.out.println("El fichero ya existe, Desea Sobre Escribir:S/N ");
copiar = ( new BufferedReader(new InputStreamReader(System.in))).readLine();
}
//si puedo copiar
if(copiar.toUpperCase().equals("S")){
//Flujo de lectura al fichero origen(que se va a copiar)
FileInputStream LeeOrigen= new FileInputStream(FOrigen);
//Flujo de lectura al fichero destino(donde se va a copiar)
OutputStream Salida = new FileOutputStream(FDestino);
//separo un buffer de 1MB de lectura
byte[] buffer = new byte[1024];
int tamaño;
//leo el fichero a copiar cada 1MB
while ((tamaño = LeeOrigen.read(buffer)) > 0) {
//Escribe el MB en el fichero destino
Salida.write(buffer, 0, tamaño);
}
System.out.println(FOrigen.getName()+" Copiado con Exito!!");
//cierra los flujos de lectura y escritura
Salida.close();
LeeOrigen.close();
}
}else{//l fichero a copiar no existe
System.out.println("El fichero a copiar no existe..."+FOrigen.getAbsolutePath());
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
Bueno el ejemplo completo lo puedes descargar desde aquí. Acepto dudas,sugerencias o correcciones
Muchas gracias me sirvió de mucho tu programa sigue así Saludos desde Colombia!
ResponderEliminarGracias.!!!! Excelente aporte a la comunidad Java.
ResponderEliminarChimbote-PERU.
Excelente metodo, muchisimas gracias.
ResponderEliminarmuy buen aporte, gracias
ResponderEliminar