Procurar arquivo no disco

2 respostas
B

Ae pessoal,

Preciso procurar um arquivo no disco a partir de seu nome sem utilizar filechooser. A idéia é percorrer diretórios e arquivos da unidade de disco e seus subdiretórios, retornando o caminho do arquivo. Sei q preciso utilizar a classe java.io File mas não estou conseguindo. Se houver algum exemplo, ok.

Daniel Henrique

2 Respostas

R

Bom, vc pode usar o metodo listFiles() da classe java.io.File, e fazer um for por cada resultado. A cada iteracao vc verifica se eh um diretorio ( isDirectory() ) ou arquivo ( isFile() )… Se for dir, vc chama o metodo recusivamente, caso contrario vc compara o nome do arquivo atual com o arquivo que vc esta procurando.

Rafael

T

Para brincar um pouco com recursividade:

Rode este teste como:
java -cp . Test157 meuarquivo

para achar todos os arquivos cujo nome EXATO é “meuarquivo”. Infelizmente esta rotina não aceita wildcards (como “*.java”)

import java.io.*;
import java.util.*;

class Test157 {
    
    /** Primeiro listamos TODOS os arquivos, então pegamos os diretórios e listamos recursivamente  */
    public static void findFile (List l, File dir, String name) {
        File[] files = dir.listFiles();
        for (int i = 0; i < files.length; ++i) {
            File pathname = files[i];
            String nm = pathname.getName();
            if (nm.equalsIgnoreCase(name)) {
                l.add (pathname);
            }
            if (pathname.isDirectory() && !nm.equals(".") && !nm.equals("..")) {
                findFile (l, pathname, name);
            }
        }
    }
    
    /** Ao listar os arquivos com listFiles já pegamos os diretórios e listamos recursivamente 
     *  Evitamos criar um File[] dessa forma 
     */
    public static void findFile2 (final List l, File dir, final String name) {
        dir.listFiles( new FileFilter() {
            public boolean accept(File pathname) {
                String nm = pathname.getName();
                if (nm.equalsIgnoreCase(name)) {
                    l.add(pathname);
                }
                if (pathname.isDirectory() && !nm.equals (".") && !nm.equals("..")) {
                    findFile2 (l, pathname, name);
                }
                return false;
            }
        });
    }
    
    public static void main(String[] args) {
        // Se você for comparar ambas as rotinas, ambas
        // devem levar o mesmo tempo aproximadamente.
        List files = new ArrayList();
        List files2 = new ArrayList();
        long t = System.currentTimeMillis();
        findFile (files, new File("."), args[0]);
        System.out.println ("\n findfile:" + (System.currentTimeMillis() - t));
        System.out.println (files);
        t = System.currentTimeMillis();
        findFile2 (files2, new File("."), args[0]);
        System.out.println ("\n findfile2:" + (System.currentTimeMillis() - t));
        System.out.println (files2);
    }
}
Criado 7 de novembro de 2004
Ultima resposta 9 de nov. de 2004
Respostas 2
Participantes 3