Gente, estou precisando de um programa para procurar em vários ficheiros um determinado número, sendo que ele pesquise em todos os arquivos do diretório até encontrar. Eu consegui apenas um código para procurar em um ficheiro já especificado…segue o código:
public static boolean procura() {
boolean achou = false;
String linha="";
String pal = JOptionPane.showInputDialog("Digite o nome da palavra a procurar:");
try {
BufferedReader in = new BufferedReader(new FileReader("teste.txt"));
while ((linha = in.readLine()) != null) {
if (linha.contains(pal)) {
System.out.println(linha);
achou = true;
}
}
} catch (Exception e) {
System.err.println("Erro na abertura do arquivo ");
return achou;
}
return achou;
}
Eu segui mais ou menos seu raciocinio, cheguei a essa conclusão sem êxito:
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjavax.swing.JOptionPane;publicclassBusca{staticFilearq;publicstaticbooleanprocura(){booleanachou=false;Stringlinha="";Filearquivos[];Filediretorio=newFile("C:\\");arquivos=diretorio.listFiles();for(inti=0;i<arquivos.length;i++)arq=arquivos[i];Stringpal=JOptionPane.showInputDialog("Digite o nome da palavra a procurar:");try{BufferedReaderin=newBufferedReader(newFileReader(arq));while((linha=in.readLine())!=null){if(linha.contains(pal)){System.out.println(linha);achou=true;}}}catch(Exceptione){System.err.println("Erro na abertura do arquivo ");returnachou;}returnachou;}publicstaticvoidmain(String[]args){procura();}}
Poderia me dar uma dica?
E
entanglement
Hum…
for(inti=0;i<arquivos.length;i++)arq=arquivos[i];
Não está faltando algum “{” depois do for?
P
propagno
Mas mesmo com o “}” não me retorna nada, era para me retornar toda a linha
E
entanglement
Ai minha Santa Catarina - eu não falei para você botar um for deste jeito errado aqui:
A chave que fecha é bem depois , e fica por sua conta descobrir onde é que ela tem de ficar
P
propagno
Não sei bem, fechando esse for depois, mesmo assim funcione…
E
entanglement
Um exemplo do que você deveria fazer. Não compilei o seguinte código
Dica: Evite ao máximo usar static em classes. Exceções: public static void main e constantes (static final).
importjavax.swing.*;importjava.io.*;importjava.util.*;/** * Evite ao máximo usar static em classes. * Exceções: public static void main e constantes (static final). */publicclassBusca{publicstaticvoidmain(String[]args){Buscab=newBusca();Stringpalavra=JOptionPane.showInputDialog("Digite a palavra a ser procurada");Stringdiretorio=JOptionPane.showInputDialog("Digite o diretório");booleanachou=b.procuraEmDiretorio(palavra,diretorio);if(achou){System.out.println("A palavra foi encontrada");}else{System.out.println("A palavra não foi encontrada");}}publicbooleanprocuraEmDiretorio(Stringpalavra,Stringdiretorio){String[]arquivos=newFile(diretorio).list();for(Stringarquivo:arquivos){booleanachou=procuraEmArquivo(palavra,arquivo);if(achou)returntrue;// não precisa procurar mais}returnfalse;// não achou mesmo}publicbooleanprocuraEmArquivo(Stringpalavra,Stringarquivo){BufferedReaderbr=null;try{br=newBufferedReader(newFileReader(arquivo));for(Stringlinha=br.readLine();linha!=null;linha=br.readLine()){if(linha.contains(palavra){returntrue;}}}catch(IOExceptionex){ex.printStackTrace();}finally{// Note que o "finally" é executado antes do return - mágicas do Java :)if(br!=null)try{br.close();}catch(IOExceptionex2){}}returnfalse;}}
P
propagno
Dei uma modificada louca, ai agora consigo pesquisar pelo menos no primeiro arquivo e imprimir linha e diretório, mas não consigo acessar os outros ficheiros de forma correta. Alguma luz para isso?
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileFilter;importjava.io.FileReader;importjava.io.IOException;importjavax.swing.JOptionPane;publicclassBusca{@SuppressWarnings("unused")publicstaticbooleanprocura()throwsIOException{booleanachou=false;Stringlinha="";FileFilterfilter=newFileFilter(){publicbooleanaccept(Filefile){returnfile.getName().endsWith(".txt");}};Filediretorio=newFile("C:\\");File[]arquivos=diretorio.listFiles(filter);intlen=0;if(arquivos!=null)len=arquivos.length;Stringf;for(inti=0;i<len;i++){f=arquivos[i].getName();Stringpal=JOptionPane.showInputDialog("Digite o nome da palavra a procurar:");BufferedReaderin=newBufferedReader(newFileReader(f));while((linha=in.readLine())!=null){if(linha.contains(pal)){System.out.println(linha);System.out.println(arquivos[i].getName());achou=true;}}}returnachou;}publicstaticvoidmain(String[]args)throwsIOException{procura();}}
B
btafarelo
Segue um código que mostra apenas a busca nos arquivos.
Eu fui tentando aqui, ai cheguei nesse código, e pelo menos, está me ajudando na tarefa. Segue código:
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileFilter;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;importjavax.swing.JOptionPane;publicclasslistarArquivos{publicvoidlistarArquivos(StringnomeDiretorio)throwsIOException{Stringlinha="";Filediretorio=newFile(nomeDiretorio);File[]fList=diretorio.listFiles();Stringpal=JOptionPane.showInputDialog("Digite o nome da palavra a procurar:");for(Filefile:fList){if(file.isFile()){BufferedReaderin=newBufferedReader(newFileReader(file.getAbsolutePath()));while((linha=in.readLine())!=null){if(linha.contains(pal)){System.out.println(linha);System.out.println(file.getName());}}}elseif(file.isDirectory()){listarArquivos(file.getAbsolutePath());}}}publicstaticvoidmain(String[]args)throwsIOException{listarArquivoslist=newlistarArquivos();finalStringdiretorioWindows="C:/";list.listarArquivos(diretorioWindows);}}