Foro de elhacker.net

Programación => Java => Mensaje iniciado por: MrDev en 8 Noviembre 2016, 21:45 pm



Título: Copia de ficheros recursiva
Publicado por: MrDev en 8 Noviembre 2016, 21:45 pm
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
  1. public class Main {
  2.  
  3. public static void main(String[] args) throws IOException {
  4.  
  5. copiaRecursiva(dir1,dir2); //Introduce en dir1 la direccion origen y dir2 el destino
  6.  
  7. }
  8.  
  9. public static void copiaRecursiva(String dirUno, String dirDos){
  10. File carpeta1 = new File(dirUno); //convertir string dirUno a File para manipularlo
  11. File auxFile = null;   //File auxiliar
  12. File auxDir = null;   //File auxiliar para una url
  13. String[] array = carpeta1.list(); //array de los archivos y directorios listados en la carpeta de origen
  14. try{
  15. for (String string : array) {   //recorrer los ficheros de la carpeta de origen
  16. auxFile = new File(dirUno+string);   //convertir el string del nombre a file para comprobaciones
  17. if(auxFile.isDirectory()){   //comprobar si el fichero es un directorio
  18. auxDir = new File(dirDos+string);   //si lo es, creamos una variable File auxiliar
  19. auxDir.mkdirs();
  20.  
  21. copiaRecursiva(auxFile.getAbsolutePath(),auxDir.getAbsolutePath());
  22. }else{
  23. FileWriter copia = new FileWriter(dirDos+string);
  24.  
  25. copiarFichero(auxFile,new File(dirDos+string));
  26. }
  27. }
  28. }catch(Exception ex){
  29. System.out.println("Error: "+ex.getMessage());
  30. }
  31.  
  32. }
  33.  
  34.  
  35. public static void copiarFichero(File f1, File f2){
  36. try{
  37. byte[] info = new byte[100];
  38. int leido = is.read(info);
  39.  
  40. while(leido>0){
  41. os.write(info);
  42. leido = is.read(info);
  43. }
  44. }catch(Exception ex){
  45. System.out.println("Error: "+ex.getMessage());
  46. }
  47. }
  48. }
  49.  


Título: Re: Copia de ficheros recursiva
Publicado por: 0xFer en 8 Noviembre 2016, 22:57 pm

Código
  1. uxFile = new File(dirUno+string);

La forma en la que concatenas no es la correcta, falta "\\" alli


Título: Re: Copia de ficheros recursiva
Publicado por: MrDev en 9 Noviembre 2016, 13:38 pm
Ya lo he corregido, es el siguiente codigo: no hay que meterle la dir1 y dir2 con el "/" final

Código
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8.  
  9. public class Main {
  10.  
  11. public static void main(String[] args) throws IOException {
  12.  
  13. copiaRecursiva(dir1,dir2);
  14.  
  15. }
  16.  
  17. public static void copiaRecursiva(String dirUno, String dirDos){
  18. File carpeta1 = new File(dirUno); //convertir string dirUno a File para manipularlo
  19. File auxFile = null;   //File auxiliar
  20. File auxDir = null;   //File auxiliar para una url
  21. String[] array = carpeta1.list(); //array de los archivos y directorios listados en la carpeta de origen
  22. try{
  23. for (String string : array) {   //recorrer los ficheros de la carpeta de origen
  24. auxFile = new File(dirUno+"/"+string);   //convertir el string del nombre a file para comprobaciones
  25. if(auxFile.isDirectory()){   //comprobar si el fichero es un directorio
  26. auxDir = new File(dirDos+"/"+string);   //si lo es, creamos una variable File auxiliar
  27. auxDir.mkdirs();
  28.  
  29. copiaRecursiva(auxFile.getAbsolutePath(),auxDir.getAbsolutePath());
  30. }else{
  31. System.out.println(dirDos+"/"+string);
  32. System.out.println(dirUno+"/"+string);
  33. FileWriter copia = new FileWriter(dirDos+"/"+string);
  34.  
  35. copiarFichero(auxFile,new File(dirDos+"/"+string));
  36. }
  37. }
  38. }catch(Exception ex){
  39. System.out.println("Error: "+ex.getMessage());
  40. }
  41.  
  42. }
  43.  
  44.  
  45. public static void copiarFichero(File f1, File f2){
  46. try{
  47. byte[] info = new byte[100];
  48. int leido = is.read(info);
  49.  
  50. while(leido>0){
  51. os.write(info);
  52. leido = is.read(info);
  53. }
  54. os.flush();
  55. os.close();
  56. }catch(Exception ex){
  57. System.out.println("Error: "+ex.getMessage());
  58. }
  59. }
  60. }