Pessoal, estou tentando ler a URL de um site.
Esta URL tem em torno de 5000 linhas, porém sempre que vou ler a URL, o BufferedReader interrompe a leitura de linha em torno de 1500 a 2000 linhas e não gera nenhum erro.
Tem algo errado no código abaixo?
Obrigado
//Monto o URL para ser lidotry{url=newURL(link);buffer=newBufferedReader(newInputStreamReader(url.openStream()));}catch(MalformedURLExceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"Erro MalformdedURL");}catch(IOExceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"Erro IOException");}//Percorro a URL procurando os textos especificostry{while((linha=buffer.readLine())!=null){if(linha=="<div align=\"center\"><strong>Título Original:</strong></div></dh>"){buffer.readLine();linha=buffer.readLine();inicio=linha.lastIndexOf("<div align=\"center\">");fim=linha.indexOf("</div></td>");setTituloOriginal(linha.substring(inicio,fim));System.out.println("Achou");System.out.println(getTituloOriginal());}i++;System.out.println(i+" - "+linha);}}catch(IOExceptione){e.printStackTrace();}finally{try{buffer.close();}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}
Java é uma danada de uma linguagem dos infernos onde não dá para comparar 2 strings usando “==” (até em C++ dá para fazer isso )
Acho que foi um deslize momentâneo de sua parte, você deve saber exatamente o conserto para esse problema.
(Eu volta e meia também faço isso - ou coisa muito pior, e é por isso é que não fico tripudiando sobre seu erro.)
F
fabio_fish
Estava utilizando o método .equals, porém como estava dando o mesmo erro tentei fazer a comparação com ==, porém o problema não é este.
A leitura da URL não chega na parte onde contém esta linha que estou procurando, esta linha esta quase no final do arquivo, em torno de 4000 linhas, porém o máximo que ele chega a ler é em 2000 e pouco, não passa disso.
Simplesmente interrompe a leitura e não gera nenhum erro
matheuslmota
Seu problema é com o tamanho do buffer do BufferedReader, que possui tamanho default de 8Kb.
Você pode tentar alocar um tamanho maior para o buffer, passando esse tamanho como parâmetro para o contrutor. Vamos usar um buffer de 100Kb, por exemplo:
//Monto o URL para ser lidotry{url=newURL(link);buffer=newBufferedReader(newInputStreamReader(url.openStream()),100*1024);// Passando o tamanho do buffer como segundo parâmetro do construtor.}catch(MalformedURLExceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"Erro MalformdedURL");}catch(IOExceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"Erro IOException");}//Percorro a URL procurando os textos especificostry{while((linha=buffer.readLine())!=null){if(linha=="<div align=\"center\"><strong>Título Original:</strong></div></dh>"){buffer.readLine();linha=buffer.readLine();inicio=linha.lastIndexOf("<div align=\"center\">");fim=linha.indexOf("</div></td>");setTituloOriginal(linha.substring(inicio,fim));System.out.println("Achou");System.out.println(getTituloOriginal());}i++;System.out.println(i+" - "+linha);}}catch(IOExceptione){e.printStackTrace();}finally{try{buffer.close();}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}
Talvez isso resolva seu problema.
matheuslmota
Lembre-se de comparar Strings usando o método equals.
F
fabio_fish
Oi Matheus, obrigado pela resposta.
Efetuei a alteração como você sugeriu, porém continua ocorrendo o mesmo problemas.
Estes são as saídas que estão saindo, conforme pode ver, não tem um critério onde esta sendo interrompido.
Os 2 testes foram feitas com a alterção do tamanho do buffer.
F
fabio_fish
Acabei de fazer o teste deste código em outro pc e funcionou numa boa.
Consigo percorrer todo o codigo fonte da pagina.
Na máquina que esta ocorrendo o problema, já removi todo o java e jdk e reinstalei e o problema continua.
Alguém tem uma idéia do que pode ser?