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.