Pergunta

Eu estou usando a seguinte função básica que eu copiei a partir da rede para ler um arquivo de texto

    public void read ()
{
    File file = new File("/Users/MAK/Desktop/data.txt");
    System.out.println("Start");
    try
    {
        //
        // Create a new Scanner object which will read the data from the
        // file passed in. To check if there are more line to read from it
        // we check by calling the scanner.hasNextLine() method. We then
        // read line one by one till all line is read.
        //
        Scanner scanner = new Scanner(file);
        int lineCount = 0;
        if (scanner == null)
        {
            System.out.println("Null File");
        }
        else
        {
            System.out.println(scanner.toString());
        }
        while (scanner.hasNextLine())
        {
            String line = scanner.nextLine();

            System.out.println("Line " + lineCount +" contain : " + line);
            lineCount++;
        }
        System.out.println("End of Try Bluck");
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
        System.out.println("Exception Bluck");
    }
    System.out.println("End");
}
}

É bem com pequeno arquivo de tamanho médio e (que contêm 10-20000 linha de dados) que trabalham No entanto ele não conseguiu trabalho com um arquivo que contém 500 mil linhas. Eu não estou recebendo um erro (pelo menos não vendo ninguém). Então, o que está acontecendo? O que devo fazer aqui para ser capaz de pronto uma grande arquivos tais?

Nota: Eu já aumentou a pilha para 2 GB na máquina de teste que executa o Windows Server 2008 com 4 GB de RAM. mas isso não ajudou muito!

Por favor, alguém pode me dizer o que devo fazer aqui?


Atualização 01

O seguinte é a saída

Iniciar

java.util.Scanner [delimitadores = \ p {javaWhitespace} +] [position = 0] [partida válida = false] [entrada necessidade = false] [código fechado = false] [ignorada = false] [separador de grupo = \,] [decimal separador =.] [prefixo positivo =] [negativo prefixo = \ Q \ E] [sufixo positivo =] [sufixo negativo =] [cadeia = NaN \ Q \ E] [cadeia infinito = \ Q 8 \ E]

Fim da Try Bluck

Fim

Foi útil?

Solução

Melhor ir para BufferedReader com um FileReader

Outras dicas

Se você não está recebendo um erro, ele poderia muito bem ser apenas a demorar muito tempo. É o disco ainda está ativa? O que você está fazendo com a saída do console - tem que parou? Você diz que "não funcionou", mas você não disse como ele é, na verdade, comportando. O que você está vendo?

A memória não deve ser um problema, você não está realmente fazendo alguma coisa com as linhas -. Apenas contá-los e gravá-los para o console

Um problema no seu código - você está verificando se scanner é nulo, mas não pode possivelmente ser, porque você está usando a referência retornada por uma chamada do construtor. Que situação você estava tentando lidar com?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top