Leitura de arquivo texto

3 respostas
R

Estou tentando ler um arquivo texto que tem 119549 linhas e só consigo ler até a linha 23527.

Eu uso o código a seguir.
import java.io.*;

public class Estudoss{
  public static void main(String[] args){

    try {
        BufferedReader in = new BufferedReader(new FileReader("arquivo.txt"));
        String str;
  	 
        while((str = in.readLine()) != null){
        	
        	System.out.println(str);
        	
        }
       
        in.close();
    } 
    catch (IOException e){
        // possiveis erros são tratatos aqui
    }

    System.exit(0);
  }
}

Existe alguma maneira de ler um arquivo maior?

3 Respostas

aix

voce pode especificar o tamanho do buffer desejado no segundo parâmetro.

fonte: http://www.guj.com.br/articles/13

rodrigomuribec

O java vem aumentando o tamanho do buffer a cada versão. A nível de curiosidade se queres verificar o tamanho do teu buffer segue o código:

import java.io.BufferedInputStream;
import java.io.InputStream;

public class BufferSizeDetector extends BufferedInputStream {
    public static void main(String[] args) {
        BufferSizeDetector bsd = new BufferSizeDetector(null);

        System.err.println(System.getProperty("java.version"));
        System.err.println(bsd.getBufferSize());
    }

public BufferSizeDetector(InputStream in) {
    super(in);
}

public int getBufferSize() {
        return super.buf.length;
    }
}

Pra aumentar o buffer é so modificar o segundo parâmetro:

BufferedReader leitor = new BufferedReader(reader,1*1024*1024);
E

O seu código lê perfeitamente um arquivo de um milhão de linhas sem problemas. Por isso, não é o problema do BufferedWriter.
Você está é com algum outro problema que você não imprimiu no stack trace (por exemplo, se você está rodando esse programa sob o Eclipse, ele tem um limite para a quantidade de dados que consegue mostrar no console). Só para comprovar isso, estou postando seu programa modificado, que lê um arquivo e imprime o número de linhas lidas. Testei com um arquivo que tinha 2.773.064 linhas.

import java.io.*;  
      
    public class ContadorLinhas {  
      public static void main(String[] args){  
      
        try {  
            BufferedReader in = new BufferedReader(new FileReader(args[0]));  
            String str;  
            long nLinhas = 0;
            while((str = in.readLine()) != null){  
                  
                nLinhas++;
                  
            }  
             
            in.close();  
            System.out.printf ("Numero de linhas: %d %n", nLinhas);
        }   
        catch (IOException e){  
            e.printStackTrace(); // pelo menos imprima o stack trace ! 
        }  
      
        System.exit(0);  
      }  
    }
Criado 12 de maio de 2012
Ultima resposta 14 de mai. de 2012
Respostas 3
Participantes 4