Question

J'utilise la fonction de base suivante que je copiais du filet pour lire un fichier texte

    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");
}
}

Il fonctionne très bien avec le milieu et le fichier de petite taille (qui contiennent 10-20000 ligne de données) Cependant, il n'a pas réussi à travailler avec un fichier qui contient 500000 ligne. Je ne reçois pas une erreur (au moins de ne pas voir tout le monde). Alors, quoi de neuf? Que dois-je faire ici pour être en mesure de préparer un gros fichiers?

Note: Je l'ai déjà augmenté le tas pour 2 Go sur la machine de test qui exécutent Windows Server 2008 avec 4 ram Go. mais cela n'a pas aidé beaucoup!

S'il vous plaît quelqu'un peut me dire ce que je dois faire ici?


Mise à jour 01

Ce qui suit est la sortie

  

Démarrer

     

java.util.Scanner [délimiteurs = \ p {} javaWhitespace +] [position = 0] [correspondance valide = false] [= false besoin entrée] [source fermée = false] [sautée = false] [séparateur de groupe = \] [décimal = séparateur.] [préfixe positif =] [préfixe négatif = \ Q- \ E] [suffixe positif =] [suffixe négatif =] [NaN chaîne = \ Q \ E] [chaîne de l'infini = \ Q ∞ \ E]

     

Fin de Try Bluck

     

Fin

Était-ce utile?

La solution

Mieux vaut aller pour BufferedReader avec un FileReader

Autres conseils

Si vous n'obtenez une erreur, il pourrait bien être en train de prendre beaucoup de temps. Est-ce le disque encore actif? Que faites-vous avec la sortie de la console - est-il arrêté? Vous dites que « n'a pas fonctionné », mais vous avez pas dit comment il est en fait se comporter. Que voyez-vous?

mémoire ne doit pas être un problème que vous ne faites quoi que ce soit avec les lignes -. Il suffit de les compter et de les écrire à la console

Un problème dans votre code - vous vérifiez si scanner est nul, mais il ne peut pas peut être, parce que vous utilisez la référence retournée par un appel constructeur. Quelle est la situation que vous essayiez de faire face?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top