Ler arquivo txt linha por linha java

Boa noite, gostaria de saber como faço para ler uma certa linha de um arquivo txt no java,
meu arquivo txt contem 2 linhas, ex:
Teste1 Teste2
Teste3 Teste4

Tenho o seguinte código:

public static void main(String[] args) throws IOException {
   BufferedReader br = new BufferedReader(new		 
   FileReader("arquivo.txt"));
   String linha = br.readLine();
	  System.out.println(linha);
	  br.close();	
	}

se eu executar esse código ele imprime só Teste1 Teste2, como eu poderia pegar dados da primeira e segunda linha, tipo: Teste1 e Teste4, e armazenar em uma variável?

tentei com substring:

System.out.println(linha.substring(0, 6));
System.out.println(linha.substring(20, 26));

mas da o seguinte erro:

Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 26 at java.lang.String.substring(String.java:1907)

Como posso resolver esse problema?

Fala Emanuel,

Quando você inicia a leitura de um arquivo o Java já faz a leitura linha a linha. Na realidade o método br.readLine(), irá retornar a próxima linha ou null caso você atinja o final do arquivo.

Normalmente o que fazemos é um loop de leitura da seguinte forma:

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

br.close();

Certo, Mais como eu faço para pegar algumas posições da segunda linha,
tipo se eu quiser pegar só a palavra Teste4, como posso pegar?

usando System.out.println(linha.substring(20, 26)); da erro.

Qual erro está dando? String Index Out of Bound Exception?

Isso, é porque eu estou fazendo uma simulação de como pegar dados de um arquivo de retorno de um banco e pegar esses dados e salvar na base de dados.

Então,

Passo 1, se você está tentando simular a leitura em um banco de dados, use arquivos do tipo CSV (Common Separated Values), esses arquivos são conjuntos de dados separados por “,” ou “;”.

Assim você não precisa usar o substring para ler um pedaço do seu texto, e evita problemas como essa exceção. Ao invés de substring tentar usar o método split, no CSV ele vai devolver uma lista de strings que serão separadas no limitador “,” ou “;”.

Não sei se ficou claro, mas qualquer dúvida é só mandar o papo.

@aresmaverick, é porque estou implementando em meu sistema um gerador de boletos onde cliente poderá pagar esse boleto em bancos ou casas lotéricas, e eu sei que quando o cliente fizer o pagamento o meu banco ex:(Bradesco) vai me enviar uma arquivo de retorno .ret, aí eu queria ler esse arquivo para pegar alguns dados e dar baixa no sistema, por isso que eu estou fazendo essa simulação de leitura de arquivo.

Hum…

Sugestões:
1 - Não faz o Substring com posições fixas sob o risco de tomar um OutOfBoundException.
2 - Se você está procurando algum dado fixo, usa o contains().

Daria pra ajudar mais se você tivesse um exemplo do arquivo e o que exatamente você quer recuperar dele.

OK obrigado , mesmo assim ajudou muito.