Ecrire une string au début d'un fichier

Ecrire une string au début d'un fichier - Java - Programmation

Marsh Posté le 16-12-2013 à 05:21:08    

Bonjour à tous,
Je traite des données en Java, où je lis des fichiers où chaque ligne est une structure en JSON dont j’extrais quelques infos que je réécris en texte brut, toujours ligne par ligne). Le problème est que les infos en entrée sont du moins récent au plus récent, et que je souhaite inverser l'ordre en sortie. J'ai beaucoup de données à traiter donc je souhaite un process le plus optimisé possible.
Mon objectif serait donc de faire en sorte d'écrire la string sortante du parser au début du fichier de sortie et non à la fin.  
Mon programme est une boucle sur chaque ligne d'entrée, la ligne est traitée par une fonction parser, et le résultat est une string à écrire dans le fichier.
 
J'ai cherché plusieurs techniques. J'ai notamment utilisé des RandomAccessFile qui permettent de se placer au début du fichiers avec un .seek(), mais l'ordre réel d'écriture est toujours le dernier écrit à la fin. Pire encore, vu que cela n'a pas l'air bufferisé j'ai des petits problèmes dans les données des fois (que je n'avais pas quand j'utilisais BufferedOutput, mais sans pouvoir changer l'ordre).
 
Avez-vous une idée, ou vais-je devoir passer par une liste à retourner et écrire élément par élément ? Compte tenu du volume à traiter je souhaite optimiser au maximum l'algorithme.
 
Merci d'avance,

Reply

Marsh Posté le 16-12-2013 à 05:21:08   

Reply

Marsh Posté le 16-12-2013 à 11:42:54    

Pas sûr que ton utilisation hors sentiers battus de l'écriture de fichiers soit rapide ... j'en resterai aux méthodes plus académiques.
Elles sont connues et faciles à implémenter.
Je stockerai tout dans une liste pour ensuite la parcourir en ordre inverse. Je ne sais pas si le Collections.reverse ou le ListIterator.hasPrevious est meilleur.
A moins d'avoir des millions de lignes, la performance devrait être acceptable.


Message édité par willy le kid le 16-12-2013 à 11:43:33
Reply

Marsh Posté le 17-12-2013 à 05:47:26    

Je viens d'implémenter ça en passant par une LinkedList en intermédiaire, et pas de souci de performance en effet.
Merci pour te réponse !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed