2015-11-01 1 views
0

Après avoir passé beaucoup de temps à rechercher le problème et à faire un peu de comptage/débogage par moi-même, j'ai découvert que le nombre maximum de caractères qu'un FileWriter peut contenir à la fois est d'environ 1216. Quelqu'un peut-il m'aider? contourner ce problème?FileWriter n'écrit pas tout son contenu - comment se déplacer au maximum?

J'écris essentiellement un script en Java pour combiner deux fichiers .csv car j'ai besoin de mettre le contenu de chaque fichier côte à côte dans un fichier .csv. J'interrompt et j'ajoute les caractères, ainsi que les virgules et les nouvelles lignes, à l'auteur du fichier. Cependant, toutes mes sorties s'arrêtent à environ 80% à travers le processus d'écriture. Je ne reçois aucune erreur, mais il me semble maintenant évident qu'il s'agit d'un problème de capacité FileWriter.

Si j'écris ce que j'ai puis commencer à ajouter à un nouveau FileWriter, je vais perdre ma place dans le fichier .csv. Je ne suis pas vraiment sûr de ce qu'il faut faire ici.

J'ai hâte de recevoir vos commentaires. Je vous remercie!!

EDIT - Code

Le problème est avec le mergedWriter.

J'ai vérifié que la longueur de "mainLines [j] .size() - 1" est 101, et il écrit seulement 85 lignes pour mes sorties. Il arrête la mi-chaîne.

for (int k = 0; k < mainLines[j].size() - 1; k++) { 
       // All deletions for bottleneck 
       if (k != 0) { 
        eachEffWriter.append(mergedFileNum + COMMA + "1," + mainLines[j].get(k)[6] + NEWLINE); 
        efficiencyWriter.append(mergedFileNum + COMMA + "1," + mainLines[j].get(k)[5] + NEWLINE); 
       } 
       // Write deletionoutput data 
       StringBuilder builder = new StringBuilder(); 
       for (String str : mainLines[j].get(k)) { 
        builder.append(str); 
        builder.append(COMMA); 
       } 
       builder.append(COMMA); 
       if (k == 0) { 
        builder.append(COMMA); 
       } 

       for (String str : kingpinLines[j].get(k)) { 
        builder.append(str); 
        builder.append(COMMA); 
       } 
       mergedWriter.append(builder.toString()); 
       mergedWriter.append(NEWLINE); 
      } 
+1

Cela n'a aucun sens. Postez votre code. –

+1

Avez-vous appelé '.close()' sur 'FileWriter' après avoir fini d'écrire? – janos

+1

Étant donné que j'ai écrit un fichier dat de 1,1 Go en utilisant 'FileWriter', je ne pense pas que votre évaluation selon laquelle il ne peut écrire que ~ 1216 caractères est correcte. Publier un échantillon de code afin que nous puissions le diagnostiquer? –

Répondre

1

Résolu.

Je n'effectuais pas de vidage/fermeture de mon graveur avant de le réinstancier dans un nouveau fichier. J'aurais dû soit faire un tableau de mergedWriters, soit le rincer/le fermer à chaque fois avant de le réattribuer.