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
[code]//Monto o URL para ser lido
try {
url = new URL(link);
buffer = new BufferedReader(new InputStreamReader(url.openStream()));
} catch (MalformedURLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, “Erro MalformdedURL”);
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, “Erro IOException”);
}
//Percorro a URL procurando os textos especificos
try {
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 (IOException e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}[/code]
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.)
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
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:
[code]//Monto o URL para ser lido
try {
url = new URL(link);
buffer = new BufferedReader(new InputStreamReader(url.openStream()), 100*1024); // Passando o tamanho do buffer como segundo parâmetro do construtor.
} catch (MalformedURLException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, “Erro MalformdedURL”);
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, “Erro IOException”);
}
//Percorro a URL procurando os textos especificos
try {
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 (IOException e) {
e.printStackTrace();
} finally {
try {
buffer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}[/code]
Talvez isso resolva seu problema.
Lembre-se de comparar Strings usando o método equals.
Oi Matheus, obrigado pela resposta.
Efetuei a alteração como você sugeriu, porém continua ocorrendo o mesmo problemas.
Teste 1
[quote]2229 - }
2230 -
2231 -
2232 - .ipsButton_secondary.important {
2233 - background: #9f2a00;
2234 - background: -moz-linear-gradient(top, #9f2a00 0%, #812200 100%); /* firefox */[/quote]
Teste 2
[quote]1724 - .ipsPostForm.ipsLayout_withright {
1725 - padding-right: 260px !important;
1726 - }
1727 -
1728 - .ipsPostForm .ipsLayout_content {
1729 - z-index: 900;[/quote]
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.
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?