2017-04-01 1 views
0

J'ai une question sur le traitement de gros fichier en Java. Je travaille sur Eclipse neon, sur Mac Pro. et je veux lire les fichiers .txt en Java, la taille des fichiers est en Mo ou GM. Je recherche sur google et j'ai lu toute la question ici dans stackoverflow, et j'essaie les façons de lire les fichiers. J'ai essayé le FileReader and BufferedReader , also I tried FileInputStream quand j'ai lu un fichier égal ou inférieur à 100 KB, l'eclipse est ok et il a lu tout le fichier. Mais si le fichier dans MG ou plus de 100 Ko, Eclipse suspendue et je dois le redémarrer. Je ne sais pas quel est le problème, est-ce dans mon appareil ou quoi? Je deviens vraiment confus de cela, parce que toutes les manières que j'ai essayées indiquent qu'il peut lire le dossier avec 1MG dans une seconde. Et avec moi, non. Y at-il une API ou quoi que ce soit que je puisse l'utiliser, pour garantir la lecture complète du fichier. S'il vous plaît, quelqu'un a le même problème, donnez-moi un conseil.Je ne peux pas lire plus de 1 Ko en Java

Voici le code:

FileReader fileReader1 = new FileReader("/Users/Desktop/i/36.txt"); 
     BufferedReader br = new BufferedReader(fileReader1); 
      String line ; 
      while ((line = br.readLine()) != null) { 
       token+=line+" "; 
      } 
System.out.println(token); 

aussi j'ai essayé ceci:

List<String> lines = Files.readAllLines(Paths.get(fileName), 
        StandardCharsets.UTF_8); 

      for (String line : lines) { 
       System.out.println(line); 
      } 
+0

Vous devez afficher * le code réel *. On dirait que vous avez une boucle qui est coincée quelque part. – chrylis

+1

Le problème est dans votre code. Mais vous ne l'avez pas posté, donc ... En outre, plus de 100 Ko n'est pas vraiment une bigdata. Le tag "tinydata" serait plus approprié :-) –

+0

Avez-vous essayé cela sur l'invite de commande normale/Terminal pour voir s'il est exécuté smmotly? – Milan

Répondre

0

Le premier est siphonage le fichier entier en une seule variable (jamais utiliser la concaténation de chaîne dans une boucle, utilisez un StringBuilder) et écrasant probablement votre machine sous la charge de GC.

Le deuxième devrait fonctionner, mais cela peut prendre un certain temps sur un fichier plus volumineux; Je suis surpris qu'il n'y ait pas de version en streaming. Exécutez dans le débogueur et découvrez s'il y a une ligne qui prend une éternité.

+0

Merci chrylis, j'ai essayé le StringBuilder, il imprime toutes les lignes puis il le cache, s'il vous plait, que voulez-vous dire par chargement GC? et la prise de ligne pour toujours? – Geek

+0

@Geek "Alors cache-t-il"? Si vous voulez travailler en Java, vous devez lire les bases du fonctionnement de la récupération de place. – chrylis

+0

Ouais je le sais, mais je veux dire que puis-je faire avec? – Geek