Foros del Web » Programación para mayores de 30 ;) » Java »

Algo parecido al DIR de MS-DOS

Estas en el tema de Algo parecido al DIR de MS-DOS en el foro de Java en Foros del Web. Hola: Tengo una duda que no se resolver. Pretendo hacer un comando DIR como el de MS-DOS pero me sale un NullPointerException, que se lo ...
  #1 (permalink)  
Antiguo 06/05/2007, 10:07
 
Fecha de Ingreso: agosto-2006
Mensajes: 159
Antigüedad: 17 años, 8 meses
Puntos: 4
Algo parecido al DIR de MS-DOS

Hola:

Tengo una duda que no se resolver.

Pretendo hacer un comando DIR como el de MS-DOS pero me sale un NullPointerException, que se lo que es pero no se porque sale.

El main:

Código:
package ejemplodirmultiple;

public class Main {
    public Main() {
    }
    public static void main(String[] args) {
        // TODO code application logic here
        Dir d = new Dir("c:\\");
    }
    
}
Y la clase Dir:

Código:
package ejemplodirmultiple;
import java.io.*;
public class Dir {
    private File f;
    public Dir() {
    }
    
    public Dir(String ruta){
        this.setF(new File(ruta));
        if(this.verificador(this.getF())){
            if(this.getF().isDirectory()){
                File [] ficheros = this.getF().listFiles();
                for(int i=0;i<ficheros.length;i++){
                    if(ficheros[i].isDirectory()){
                        listarTodo(ficheros[i]);
                    }else{
                        System.out.println(ficheros[i].getName());
                    }
                }
            }
        }else{
            System.out.println("Ruta dada inexistente o inalcanzable.\n"+ruta);
            this.setF(null);
        }
    }
    private void listarTodo(File f){
        File [] f1 = f.listFiles();
        for(int i=0;i<f1.length;i++){
            if(f1[i].isDirectory()){
                this.listarTodo(f1[i]);
            }else{
                System.out.println(f1[i].getName());
            }
        }
    }
    private boolean verificador(File f){
        return f.exists();
    }
    public File getF() {
        return f;
    }
    public void setF(File f) {
        this.f = f;
    }    
}
Todo va perfecto hasta mas o menos los 8 segundos de ejecucion, imagino que este dato variara segun donde se ejecute, en el que sale el siguiente error:

Exception in thread "main" java.lang.NullPointerException
at ejemplodirmultiple.Dir.listarTodo(Dir.java:42)
at ejemplodirmultiple.Dir.<init>(Dir.java:29)
at ejemplodirmultiple.Main.main(Main.java:27)
Java Result: 1


Sabria alguien decirme porque sale este error?

Muchas gracias.
  #2 (permalink)  
Antiguo 06/05/2007, 12:55
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Re: Algo parecido al DIR de MS-DOS

He eliminado lo que escribí
__________________
El último TipdaR

Última edición por Tipdar; 06/05/2007 a las 13:19 Razón: Me había equivocado de hilo
  #3 (permalink)  
Antiguo 06/05/2007, 13:50
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Algo parecido al DIR de MS-DOS

Hola:

¿Cual es la línea 42 de Dir.java?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 06/05/2007, 14:56
 
Fecha de Ingreso: agosto-2006
Mensajes: 159
Antigüedad: 17 años, 8 meses
Puntos: 4
Re: Algo parecido al DIR de MS-DOS

Hola:

Perdon tienes razon.

La linea 42 Dir.java
Código:
    private void listarTodo(File f){
        File [] f1 = f.listFiles();
        for(int i=0;i<f1.length;i++){
            if(f1[i].isDirectory()){
                this.listarTodo(f1[i]);
            }else{
                System.out.println(f1[i].getName());
            }
        }
    }
La linea 29 de Dir.java

Código:
    public Dir(String ruta){
        this.setF(new File(ruta));
        if(this.verificador(this.getF())){
            if(this.getF().isDirectory()){
                File [] ficheros = this.getF().listFiles();
                for(int i=0;i<ficheros.length;i++){
                    if(ficheros[i].isDirectory()){
                        listarTodo(ficheros[i]);
                    }else{
                        System.out.println(ficheros[i].getName());
                    }
                }
            }
        }else{
            System.out.println("Ruta dada inexistente o inalcanzable.\n"+ruta);
            this.setF(null);
        }
    }
Y el error de la linea del Main

Código:
Dir d = new Dir("c:\\"); 
  #5 (permalink)  
Antiguo 06/05/2007, 16:03
 
Fecha de Ingreso: agosto-2006
Mensajes: 159
Antigüedad: 17 años, 8 meses
Puntos: 4
Re: Algo parecido al DIR de MS-DOS

Hola:

Estube dandole vueltas y llego a la conclusion de que no existe otra forma de listar directorios y subdirectorios si no es usando la autorreferencia. Por lo menos eso creo, si no no me explico como puedo averiguar la profundidad de los directorios.

Si existe otra manera mas sencilla me gustaria que alguien pudiera explicarmelo.

Gracias.
  #6 (permalink)  
Antiguo 06/05/2007, 22:42
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Algo parecido al DIR de MS-DOS

Hola:

El error de NullPointer excepcion en la linea 29 posiblemen se debe a que f1 es null, es decir f.listFiles() devuelve null. No veo el motivo, pero pudes comprobarlo antes de meterte en el bucle.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 07/05/2007, 12:01
 
Fecha de Ingreso: agosto-2006
Mensajes: 159
Antigüedad: 17 años, 8 meses
Puntos: 4
Re: Algo parecido al DIR de MS-DOS

Hola:

Lo que hice fue controlar la escepcion y parece que por el momento funciona:

Código:
    public void listarTodo() throws Exception{        
        StringBuilder sb = new StringBuilder();
        File [] ficheros = this.getF().listFiles();
        for(int i=0;i<ficheros.length;i++){
            try{
                if(ficheros[i].isDirectory()){
                    Dir2 d2 = new Dir2(ficheros[i]);
                    d2.listarTodo();
                }else{
                    sb.append(ficheros[i].getCanonicalPath()).append(File.separatorChar).append(ficheros[i].getName());
                    System.out.println(sb.toString());                    
                }
                
            }catch(NullPointerException e){continue;};
        }
    }
En algun momento parece que efectivamente listFiles() devuelve null pero no se el porque.

De todas formas muchas gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:49.