Outra coisa que não gosto nessas classes ___Reader.
Infelizmente, o método readLine sempre retorna uma String, em vez de escrever sobre um StringBuffer passado como parâmetro.
Como resultado disso, se você lê um arquivo de 50MB, o resultado é que 100 MB de bytes resultantes de Strings são alocados e imediatamente disponíveis para coleção no Garbage Collector (uma vez que você despreza as strings lidas, porque só quer achar um padrão dentro delas).
Não sei se é fácil escrever uma BufferedReader2 que tivesse um método readLine2 que escrevesse sobre um StringBuilder a linha dada. O método indexOf de StringBuilder não exerce pressão sobre o Garbage Collector.
Como o Garbage Collector é bem otimizado, na prática gerar e coletar 100 MB de dados não é muito lento, e acho que talvez não valha a pena gastar tempo criando uma BufferedReader2.
I
Ivan_Alves
Eu não sei se você fez isso mas seria mais rápido se você saísse do loop ao achar seu parametro específico já que é apenas 1, além disso leia linha por linha me parece que no seu código você lê o arquivo inteiro e joga em uma String, flw!
I
Ivan_Alves
Cara fiz um código rápido aqui vê se te ajuda
public static boolean buscaParametroArquivo(String caminho, String parametro) throws Exception{
FileReader reader = new FileReader(fileChooser.getSelectedFile());
BufferedReader leitor = new BufferedReader(reader);
String linha = "";
//irá guardar linha por linha se for nulo é porque não há mais linhas e sairá do loop
while ((linha = leitor.readLine()) != null) {
if(linha.contains(parametro)){
return true; //se tiver um parametro retorna true
}
}
return false; //se não achar nada retorna falso
}
flw!!
S
souzajhonatan
Legal esse método,
Teria alguma outra maneira de localizar o parâmetro sem percorrer linha por linha? Como se fosse um select em um banco de dados…
E
entanglement
Esse arquivo é sempre “novo” (ou seja, a cada vez que você roda esse programa você recebe um arquivo diferente) ou é um arquivo que é sempre consultado, quase não muda, e você pode criar um arquivo de índice para esse seu arquivo - mais ou menos como se fosse um dicionário?
G
gomesrod
Se quiser fazer de um jeito totalmente diferente, existem algumas opções:
Usar Lucene
É um engine de busca da Apache, bastante otimizado quanto à performance: http://lucene.apache.org/java/docs/index.html
Leva um tempo para aprender a API, mas talvez valha a pena
G
gomesrod
Importante observação, as 2 maneiras que eu citei dependem da possibilidade de se criar um índice…