Listando arquivos

3 respostas
Odyo

Pessoal,

Estou tentando fazer um método que liste todos os arquivos de um determinado diretório.
Baseado em exemplos aqui do forum mesmo eu consegui chegar até aqui.

Tentei usar recursão pra quando o laço encontrar um diretório, liste também todos os arquivos dentro daquele diretório.

Podem me ajudar a encontrar o erro ?
Estou recebendo nullpointer e não consegui filtrar o problema.

public static StringBuffer listaArquivos(File raiz){
              
        File lista[] = raiz.listFiles();;
        StringBuffer saida = new StringBuffer();
        
        for ( int i=0;i<lista.length;i++){
                       
            if (lista[i].isFile()){
                saida.append(lista[i].getAbsolutePath());
                saida.append("\t");
                saida.append(lista[i].getName());
                saida.append("\n");
            }
            
            else if (lista[i].isDirectory()){
                listaArquivos(lista[i]);
            }
                
        }
    
        return saida;
     }

}

3 Respostas

MarkKnopfler

O listFiles() lista apenas arquivos, e não diretórios. Vc deve usar list() no lugar, só que infelizmente ele retorna um array de String's e não de File's. Nada que não se resolva criando um File a partir da string:

File f = new File( raiz + "/" + lista[i] );                          
                          
if (f.isFile()){  ... }

Outra coisa:

else if (f.isDirectory()){  
      listaArquivos(f);  
}

o certo é vc fazer:

else if (f.isDirectory()){  
      saida.append( listaArquivos(f) );  
}

Quanto ao NullPointerException, procure ver a string usada para gerar os File's.

MarkKnopfler

Eis o código completo que eu consegui aqui:

import java.io.*;

public class TesteFile {

   public static StringBuffer listaArquivos(File raiz){  
                   
           String lista[] = raiz.list();
           StringBuffer saida = new StringBuffer();  
             
           for ( int i=0;i<lista.length;i++){  
               
               String s = (raiz + "/" + lista[i]).replace("//", "/");
               //System.err.println(s);
               
               File f = new File(s);
                          
               if (f.isFile()){  
                   saida.append(f.getAbsolutePath());  
                   saida.append("\t");  
                   saida.append(f.getName());  
                   saida.append("\n");  
               }  
                 
               else if (f.isDirectory()){  
                   saida.append( listaArquivos(f) );  
               }  
                     
           }  
         
           return saida;  
   }  
   
   public static void main(String[] args) {
      System.out.println( listaArquivos( new File("D:/") ) );
   }
     
}
Odyo

Dei uma olhada na API e de fato o listFiles() retorna arquivos e não diretórios… mas é estranho.
Fiz o teste aqui sem a recursão, direto na raiz (c:/) e o método retorna os diretórios também …
Inclusive coloquei um if só pra verificar se era arquivo ou diretório …

Acho que estou recebendo nullpointer pois os diretórios aparentemente estão com um nome diferente …

Program Files
Arquivos de programas

Criado 16 de novembro de 2012
Ultima resposta 17 de nov. de 2012
Respostas 3
Participantes 2