Método listFiles da Classe File é muito lento

Boa noite.

Estou fazendo um programa, e em uma determinada parte preciso fazer uma contagem de quantos arquivos existem em alguma pasta.

Então fiz um código similar a este:

[code]
public static void main(String[] args){
File f = new File(“c:/teste/”);
contar(f);
System.out.println(qtd);
}

private static int qtd = 0;

private static void contar(File diretorio){
    if(diretorio.isFile())
        qtd++;
    else if(diretorio.isDirectory()){
        File[] dir = diretorio.listFiles();
        for(int i = 0; i < dir.length; i++){
            contar(dir[i]);
        }
    }   
}[/code]

Para pastas com poucos arquivos, vai legal, porém se eu pego uma pasta que tem muitos arquivos, algo com 5000, por aí, fica muito lento, demora muito para fazer esta contagem.

Alguém tem alguma sugestão para fazer isto de forma mais rápida?

Valew

olha cara , quando você diz 5000 mil arquivos o que pega é o tempo de acesso ao HD . Pelo menos aqui em operações similares Lê demasiadamente o HD e isso “enforca” a aplicação que precisa esperar a resposta da máquina no entanto você pode melhorar um pouco esse código. Não vejo necessidade em rodar um laço ( “for” , no seu caso ) pra fazer a contagem do array .

Sugiro algo como:

[code] public static void main(String[] args){
File f = new File(“c:/teste/”);
contar(f);
System.out.println(qtd);
}

 private static int qtd = 0;  
   
 private static void contar(File diretorio){  
     if(diretorio.isFile())  
         qtd++;  
     else if(diretorio.isDirectory()){  
         File[] dir = diretorio.listFiles();  
         qtd+=dir.length;
     }     
 } [/code]

A propósito , a primeira vez que você conta os arquivos do diretório até demora , nas demais subseqüente vezes é quase instantâneo , evidenciando o que eu disse anteriormente.