FileReader/BufferedReader método readLine() pula linhas do arquivo .txt

Olá, pessoal.

Estou para desenvolver um aplicativo na minha empresa e, fazendo alguns teste, encontrei dificuldades para a leitura de um arquivo .txt. Se alguém me der uma luz, agradeço d+!

Nós temos um aparelho (Cuja finalidade não vem ao caso) que gera um arquivo de texto(.txt) em uma determinada pasta de um computador. O aplicativo que estou desenvolvendo deve capturar esse arquivo, ler seus dados e passá-los para um banco de dados. Acontece que ao utilizar o método readLine() da BufferedReader, o aplicativo pula várias linhas do arquivo .txt corrente.

Vou tentar explicar melhor. O arquivo de texto lido tem o seguinte formato:

[quote]
Arquivo teste.txt
[i]
Relatorio, versao do firmware: 07

Alvo: 00000003
Serial: FFFFFFFFFF - FV: 07
Firm Mode: 0
SensorMode:0
Relatorio: 23/12/10 19:40:15
Emissao: 23/12/10 19:57:54
Contador: 00:17:40
N.Baixo: 10
N.Alto: 10
Histerese: 3
Filtro: 4
Pts.Exame: 30
N.Eventos: 7
I Amp (mA):380
I medido: 19
I offset: 1
Tensao: 128
Fases: 1
FatorPot: 0.00
ENERGIA: 0.0000 kWh

0: 00:16:21
2: 00:16:28
-2: 00:16:39
0: 00:16:45
2: 00:16:45
0: 00:16:52
2: 00:16:58

FIM DO RELATORIO
[/i][/quote]

Utilizando as seguintes linhas de código (O código é apenas para efeito de testes, não sendo o código efetivo da aplicação):

try
{
	FileReader fr = new FileReader("c:/MDP/teste2.txt");
	BufferedReader br = new BufferedReader(fr);
		
	String linha;
			
	while(br.readLine() != null)
	{
		linha = br.readLine();
		System.out.println(linha);
	}
						
	br.close();
	fr.close();
} 
catch (FileNotFoundException e)
{
	System.out.println("O Arquivo não foi encontrado!");
	e.printStackTrace();
	System.exit(1);
}
catch (IOException e)
{	
	System.out.println("Erro na leitura do Arquivo!");
	e.printStackTrace();
	System.exit(1);
}

Dessa forma eu obtenho o seguinte resultado:

[quote]
Saída da aplicação:

Serial: FFFFFFFFFF - FV: 07
SensorMode:0
Emissao: 23/12/10 19:57:54
N.Baixo: 10
Histerese: 3
Pts.Exame: 30
I Amp (mA):380
I offset: 1
Fases: 1
ENERGIA: 0.0000 kWh
0: 00:16:21
-2: 00:16:39
2: 00:16:45
2: 00:16:58
FIM DO RELATORIO
[/quote]

Reparem que várias linhas do arquivo foram ignoradas pelo método readLine(). Alguém saberia por que isso acontece? Caso esta não seja a melhor solução para o problema, alguém indica uma melhor?
Outro problema são as linhas em branco que o método ignora totalmente. Existe alguma forma de levar em consideração também as linhas em branco?

Bom, é isso aí. Se alguém puder ajudar, agradeço desde já.

Sds à comunidade.

Preste atenção nesse trecho de código:

while(br.readLine() != null) { linha = br.readLine(); System.out.println(linha); }

Você está lendo uma linha, ignorando o seu valor e após isso lendo uma nova linha. Se você perceber, esse é o padrão da saída: apresenta um valor e pula um valor.

Uma das alternativas seria você sempre guardar o valor de readLine() na variável linha e verificar se esta é diferente de null.

Obrigado, Daniels. Problema resolvido.
Eu estava considerando que no teste do “While” o ponteiro do br ficaria no mesmo lugar. Vacilo.
Mas é isso aí, vivendo e aprendendo :slight_smile:

Brigadão, novamente!

Só uma dica porque você não usa Scanner? Acho muito melhor para manipular dados

Scanner sc =new Scanner("C:\teste.txt");
while (sc.hasNext()) {
    System.out.println(sc.nextLine());
}

Vai imprimir linha por linha. :smiley:

Opa,
Valeu pela sugestão, Lucas.
Estou fazendo testes com a Scanner aqui. Qualquer coisa posto novamente.