Problema com BufferedReader

6 respostas
F

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 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&#237;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();
			}

6 Respostas

E

Java é uma danada de uma linguagem dos infernos onde não dá para comparar 2 strings usando “==” (até em C++ dá para fazer isso :frowning: )

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

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 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();
			}

Talvez isso resolva seu problema.

matheuslmota

Lembre-se de comparar Strings usando o método equals.

F

Oi Matheus, obrigado pela resposta.
Efetuei a alteração como você sugeriu, porém continua ocorrendo o mesmo problemas.

Teste 1

<blockquote>2229 - 	}

2230 - 	

2231 - 	

2232 - 	.ipsButton_secondary.important {

2233 - 		background: #9f2a00;

2234 - 		background: -moz-linear-gradient(top, #9f2a00 0%, #812200 100%); /* firefox */</blockquote>

Teste 2

<blockquote>1724 - 	.ipsPostForm.ipsLayout_withright {

1725 - 		padding-right: 260px !important;

1726 - 	}

1727 - 		

1728 - 	.ipsPostForm .ipsLayout_content {

1729 - 		z-index: 900;</blockquote>

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

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?

Criado 10 de agosto de 2012
Ultima resposta 11 de ago. de 2012
Respostas 6
Participantes 3