Ler caracteres de um arquivo txt

5 respostas
C

Pessoal.
Estou precisando ler um arquivo txt e trazer uma determinada quantidade de caracteres.
Estou usando o seguinte código:

String caracteres = "";
int totalCaracteres = 100;			
InputStream is = this.getClass().getResourceAsStream("texto.txt");
byte b[] = new byte[128];
while( (is.read(b) > 0) && (caracteres .length() < totalCaracteres ) ) {
           caracteres += new String(b);
}
is.close();

Dessa maneira ele traz os caracteres multiplos de 128. Precisava ler a quantidade certa de caracteres deste arquivo usando uma maneira rápida para fazer isto.
Alguém sabe qual seria o melhor jeito ?
Obrigado

Carlos Cubas

5 Respostas

T

Se você tem um arquivo .txt, provavelmente ele é dividido em linhas.
Para ler uma linha de um arquivo txt, use readLine. Por exemplo:

import java.io.*;

class LerArquivoTexto {
    
    public void ler() throws IOException {
        InputStream is = getClass().getResourceAsStream ("texto.txt");
        BufferedReader br = new BufferedReader (new InputStreamReader (is));
        String linha;
        
        while ((linha = br.readLine()) != null) {
            System.out.println (linha);
        }
        br.close(); // br.close já fecha "is" automaticamente
    }
    
    public static void main(String[] args) throws IOException {
        LerArquivoTexto lat = new LerArquivoTexto();
        lat.ler();
    }
}
C

No caso, preciso ler uma quantidade de caracteres deste arquivo txt. No exemplo coloquei os primeiros 100 caracteres.
Qual seria a forma para se fazer isto sem degradar muito a performance.
Valeu

T
caracteres += new String(b);

O que lhe degrada (e muito) a performance é a concatenação de strings. Isso é um dos pontos fracos do Java (e do C#, seu parente próximo).

Se quer ler exatamente 100 caracteres (não bytes - um byte e um caracter são bichos diferentes em Java), defina um array de 100 caracteres, em vez de usar um InputStream use um Reader, e use o método “read (char [])” da interface Reader.

C

Fiz a sua sugestão.
Por favor, veja se era por este caminho.

String texto= "";
int total= 300;
try {
	char b[] = new char[total];
	InputStreamReader reader = new FileReader("texto.txt");
	BufferedReader leitor = new BufferedReader(reader);
	if(leitor.read(b) > 0) {
		texto= new String(b);
	}
	leitor.close();
	reader.close();					
} catch (Exception e) {
	e.printStackTrace();
}

Obrigado pela ajuda

Carlos Cubas

T

Hum, o que você escreveu quase funciona - o que ocorre quando o seu arquivo tem menos de 300 caracteres? Você vai ter uma String que contém o texto original, e além disso a quantidade de caracteres ‘\0’ que falta para completar 300.
Dê uma olhada se existe algum construtor de String que aceite entrar com a quantidade de caracteres lidos.

Criado 3 de julho de 2006
Ultima resposta 4 de jul. de 2006
Respostas 5
Participantes 2