Copia de ficheros recursiva

Iniciado por MrDev, 8 Noviembre 2016, 21:45 PM

0 Miembros y 1 Visitante están viendo este tema.

MrDev

Pues al lio, he hecho un programita que le das dos url, una origen y otra de destino, y te copia todos los contenidos del origen en el destino, pero no se por que no me sale, se mete por primera vez en una subcarpeta del origen, la crea en el destino, pero las otras subsubcarpetas del origen no las copia al destino, no llevo bien el debug en eclipse :(

Llevo dos dias dedicandole varias horas y estoy frustrado XD

Código (java) [Seleccionar]
public class Main {

public static void main(String[] args) throws IOException {

copiaRecursiva(dir1,dir2); //Introduce en dir1 la direccion origen y dir2 el destino

}

public static void copiaRecursiva(String dirUno, String dirDos){
File carpeta1 = new File(dirUno); //convertir string dirUno a File para manipularlo
File auxFile = null;   //File auxiliar
File auxDir = null;   //File auxiliar para una url
String[] array = carpeta1.list(); //array de los archivos y directorios listados en la carpeta de origen
try{
for (String string : array) {   //recorrer los ficheros de la carpeta de origen
auxFile = new File(dirUno+string);   //convertir el string del nombre a file para comprobaciones
if(auxFile.isDirectory()){   //comprobar si el fichero es un directorio
auxDir = new File(dirDos+string);   //si lo es, creamos una variable File auxiliar
auxDir.mkdirs();

copiaRecursiva(auxFile.getAbsolutePath(),auxDir.getAbsolutePath());
}else{
FileWriter copia = new FileWriter(dirDos+string);

copiarFichero(auxFile,new File(dirDos+string));
}
}
}catch(Exception ex){
System.out.println("Error: "+ex.getMessage());
}

}


public static void copiarFichero(File f1, File f2){
try{
OutputStream os = new FileOutputStream(f2);
InputStream is = new FileInputStream(f1);
byte[] info = new byte[100];
int leido = is.read(info);

while(leido>0){
os.write(info);
leido = is.read(info);
}
}catch(Exception ex){
System.out.println("Error: "+ex.getMessage());
}
}
}

0xFer


Código (java) [Seleccionar]
uxFile = new File(dirUno+string);

La forma en la que concatenas no es la correcta, falta "\\" alli
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

MrDev

Ya lo he corregido, es el siguiente codigo: no hay que meterle la dir1 y dir2 con el "/" final

Código (java) [Seleccionar]
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Main {

public static void main(String[] args) throws IOException {

copiaRecursiva(dir1,dir2);

}

public static void copiaRecursiva(String dirUno, String dirDos){
File carpeta1 = new File(dirUno); //convertir string dirUno a File para manipularlo
File auxFile = null;   //File auxiliar
File auxDir = null;   //File auxiliar para una url
String[] array = carpeta1.list(); //array de los archivos y directorios listados en la carpeta de origen
try{
for (String string : array) {   //recorrer los ficheros de la carpeta de origen
auxFile = new File(dirUno+"/"+string);   //convertir el string del nombre a file para comprobaciones
if(auxFile.isDirectory()){   //comprobar si el fichero es un directorio
auxDir = new File(dirDos+"/"+string);  //si lo es, creamos una variable File auxiliar
auxDir.mkdirs();

copiaRecursiva(auxFile.getAbsolutePath(),auxDir.getAbsolutePath());
}else{
System.out.println(dirDos+"/"+string);
System.out.println(dirUno+"/"+string);
FileWriter copia = new FileWriter(dirDos+"/"+string);

copiarFichero(auxFile,new File(dirDos+"/"+string));
}
}
}catch(Exception ex){
System.out.println("Error: "+ex.getMessage());
}

}


public static void copiarFichero(File f1, File f2){
try{
OutputStream os = new FileOutputStream(f2);
InputStream is = new FileInputStream(f1);
byte[] info = new byte[100];
int leido = is.read(info);

while(leido>0){
os.write(info);
leido = is.read(info);
}
os.flush();
os.close();
}catch(Exception ex){
System.out.println("Error: "+ex.getMessage());
}
}
}