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.
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
thingol
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”)
importjava.io.*;importjava.util.*;classTest157{/** Primeiro listamos TODOS os arquivos, então pegamos os diretórios e listamos recursivamente */publicstaticvoidfindFile(Listl,Filedir,Stringname){File[]files=dir.listFiles();for(inti=0;i<files.length;++i){Filepathname=files[i];Stringnm=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 */publicstaticvoidfindFile2(finalListl,Filedir,finalStringname){dir.listFiles(newFileFilter(){publicbooleanaccept(Filepathname){Stringnm=pathname.getName();if(nm.equalsIgnoreCase(name)){l.add(pathname);}if(pathname.isDirectory()&&!nm.equals(".")&&!nm.equals("..")){findFile2(l,pathname,name);}returnfalse;}});}publicstaticvoidmain(String[]args){// Se você for comparar ambas as rotinas, ambas// devem levar o mesmo tempo aproximadamente.Listfiles=newArrayList();Listfiles2=newArrayList();longt=System.currentTimeMillis();findFile(files,newFile("."),args[0]);System.out.println("\n findfile:"+(System.currentTimeMillis()-t));System.out.println(files);t=System.currentTimeMillis();findFile2(files2,newFile("."),args[0]);System.out.println("\n findfile2:"+(System.currentTimeMillis()-t));System.out.println(files2);}}