elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Listado recursivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Listado recursivo  (Leído 4,163 veces)
zaico

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Listado recursivo
« en: 22 Abril 2012, 18:29 pm »

Estoy intentando crear un programa en java para un proyecto que me liste los directorios de una forma similar al comando "tree" de linux de manera que cada fichero y subdirectorio tenga una rama que lo una con su padre y que las ramas acaben en un fichero o subdirectorio. La verdad es que llevo todo el fin de semana dandole vueltas y he conseguido bastante pero el problema es que no me lo llega a hacer bien del todo. A veces no me comunica la rama del directorio con su padre o bien sigue la rama sin haber ningun directorio. Os pongo el codigo:

Código
  1. import java.io.*;
  2.  
  3. public class Listado_Arbol {
  4.  
  5.  
  6.  public static void main(String[] args) {
  7.  
  8.    File dir = new File("./../");
  9.  
  10.    listar(dir,0);
  11.  
  12.  }
  13.  
  14.  public static void listar(File dir, int nivel) {
  15.  
  16.    if (dir.isDirectory()) {
  17.      File[] files = dir.listFiles();
  18.  
  19.  
  20.    for(int i=0; i<nivel-1; i++) {
  21.      if (files!= null){
  22.        System.out.print("| ");
  23.      }else{
  24.        System.out.print("  ");
  25.      }
  26.    }
  27.  }
  28.  if (nivel>0)System.out.print("|_ ");
  29.  System.out.println(dir.getAbsolutePath());
  30.  
  31.  try {
  32.  
  33.    for(File f : dir.listFiles()) {
  34.      if (f.isFile()) {
  35.        for(int i=0; i<nivel; i++) {
  36.          if (i==0){
  37.            System.out.print("| ");
  38.          }else{
  39.            System.out.print("  ");
  40.          }
  41.        }
  42.        System.out.println("|_ "+f.getName());
  43.      }
  44.    }
  45.  
  46.    for(File f : dir.listFiles()) {
  47.      if (f.isDirectory()) {
  48.  
  49.        listar(f,nivel+1,);
  50.  
  51.      }
  52.    }
  53.  
  54.  } catch(Exception e) {
  55.    System.out.println("No se ha podido listar");
  56.  }
  57. }
  58.  



Alguien me puede decir que es lo que esta mal ? o falta? porque por mucho que lo intento no lo veo:


« Última modificación: 27 Abril 2012, 01:11 am por Aprendiz-Oscuro » En línea

Proteus1989

Desconectado Desconectado

Mensajes: 184



Ver Perfil WWW
Re: Listado recursivo
« Respuesta #1 en: 27 Abril 2012, 03:02 am »

Te paso un código que hice algún tiempo de esto mismo, espero que te ayude.

Código
  1. private ArrayList<File> vector = new ArrayList<File>();
  2.  
  3. /*LISTAR TODO*/
  4.  
  5. public ArrayList<File> listarTodo(File dir)
  6. {
  7. vector.clear();
  8. listarT(dir);
  9. return vector;
  10. }
  11. private void listarT(File dir)
  12. {
  13. if (dir.isDirectory())
  14. {
  15. vector.add(dir);
  16. String[] children = dir.list();
  17. for (int i = 0; i < children.length; i++)
  18. listarT(new File(dir, children[i]));
  19.  
  20. } else
  21. vector.add(dir);
  22. }
  23.  
  24. /*LISTAR SOLO SUBCARPETAS*/
  25.  
  26. public ArrayList<File> listarCarpetas(File dir)
  27. {
  28. vector.clear();
  29. listarC(dir);
  30. return vector;
  31. }
  32. private void listarC(File dir)
  33. {
  34. if (dir.isDirectory())
  35. {
  36. vector.add(dir);
  37. String[] children = dir.list();
  38. for (int i = 0; i < children.length; i++)
  39. listarC(new File(dir, children[i]));
  40. }
  41. }
  42.  
  43. /*LISTAR TODO SIN SUBCARPETAS*/
  44.  
  45. public ArrayList<File> listarSinRepeticion(File dir)
  46. {
  47. vector.clear();
  48. listarSR(dir);
  49. return vector;
  50. }
  51. private void listarSR(File dir)
  52. {
  53. if (dir.isDirectory())
  54. {
  55. vector.add(dir);
  56. String[] children = dir.list();
  57. for (int i = 0; i < children.length; i++)
  58. vector.add(new File(dir, children[i]));
  59.  
  60. } else
  61. vector.add(dir);
  62. }
  63.  
  64. /*LISTAR SOLO CARPETAS SIN SUBDIRECTORIOS*/
  65.  
  66. public ArrayList<File> listarCarpetasSinRepeticion(File dir) {
  67. vector.clear();
  68. listarCSR(dir);
  69. return vector;
  70. }
  71. private void listarCSR(File dir) {
  72. if (dir.isDirectory())
  73. {
  74. vector.add(dir);
  75. String[] children = dir.list();
  76. for (int i = 0; i < children.length; i++)
  77. if(new File(dir, children[i]).isDirectory())
  78. vector.add(new File(dir, children[i]));
  79. } else
  80. vector.add(dir);
  81. }

Este código funciona perfectamente y lo que hace es guardar los Files en un ArrayList en lugar de imprimirlo por pantalla (y de ese modo poder obtener de forma rápida del File, del parent path y del file name).
Tengo también el código donde guardo toda esa info en un fichero donde además tabulo los archivos dentro de directorios creando una estructura de árbol como dices. El único detalle es que lo implementé hace muchísimo tiempo y es un poco desastre el código además de contener interfaz gráfica medio incrustado por el código.
Ahora que conozco el modelo vista controlador vuelvo a mis inicios y cuando veo mis códigos me doy cierta vergüenza xD


En línea

zaico

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Listado recursivo
« Respuesta #2 en: 30 Abril 2012, 00:23 am »

Gracias Proteus , no he dicho nada hasta ahora por que ya finalizo el plazo y la verdad es que por muchas vueltas que le di no consegui sacarlo, aún asi gracias, el unico problema es que aún no trabajamos con vectores y habia que sacarlo unicamente con los tipos de elementos que ves en codigo. Cuando cuelgue la solución la cuelgo aqui ;) gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema recursivo
Ejercicios
:ohk<any> 4 10,104 Último mensaje 4 Octubre 2008, 15:00 pm
por :ohk<any>
¿Cómo se resuelve una integral con un algoritmo recursivo?
Programación General
--<<<@u6u$t0>>>-- 3 7,068 Último mensaje 11 Diciembre 2010, 20:31 pm
por do-while
Suma de vectores recursivo
Programación C/C++
s3tH 4 7,833 Último mensaje 6 Mayo 2012, 20:18 pm
por s3tH
Algoritmo recursivo
Programación General
melisapuntoisa 0 1,792 Último mensaje 14 Diciembre 2013, 12:29 pm
por melisapuntoisa
Algoritmo recursivo potencia
Programación General
melisapuntoisa 1 1,918 Último mensaje 16 Diciembre 2013, 02:53 am
por xaps
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines