IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Ecrire à la fin d'une ligne *antérieure* à la fin d'un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Par défaut Ecrire à la fin d'une ligne *antérieure* à la fin d'un fichier
    Bonjour à tous,

    Nouveau sur le forum Développez, je me lance...

    Je développe une application réseau en java sous Eclipse et j'ai besoin de stocker des valeurs dans un fichier temporaire. J'ai 5 valeurs prise par mon programme toutes les 500ms et je les écrit sur la même ligne séparé par des virgules à l'aide de la méthode println de la classe PrintWriter (une nouvelle ligne à chaque itération, soit 500ms). Jusque là pas de problème, je peux ensuite accéder à ses valeurs par la classe BufferedReader.

    Le hic c'est que la 5ième valeur n'est pas synchrone avec les autres et arrive 5 secondes plus tard. Pour que le scmilblick ait un sens, je voudrais donc ajouter cette valeur à la fin de la ligne n-10 au dessus de la fin du fichier afin que la lecture du fichier soit, elle, synchrone et sensé. Les effets de bords seront gérer par la suite.

    J'ai eu beau chercher ici et ailleurs mais pas moyen de trouver comment accéder à une ligne antérieur, AVANT la fin du fichier et d'y ajouter du texte A LA FIN DE LA LIGNE...

    Je ne suis pas spécialement à l'aise avec les Stream I/O mais je sens qu'il va bien falloir que je m'y mette...

    Merci de votre aide,
    Ciao
    Sam

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    bein tu peux stocker tes premiere ligne dans un StringBuilder en attendant ton dernier element et apres tu ecris sur ton fichier.
    Bon c est pas tres clean mais c est un peu logic.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Par défaut
    Citation Envoyé par jhaythem
    bein tu peux stocker tes premiere ligne dans un StringBuilder en attendant ton dernier element et apres tu ecris sur ton fichier.
    Bon c est pas tres clean mais c est un peu logic.
    Je viens d'y penser
    Un tableau en somme...

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Par défaut
    Ok mais le problème est que ce "tableau" va grossir beaucoup trop avec le temps... y auriat-il moyen d' "enlever" la première "ligne" du StringBuilder à chaque itération, de manière à ce que sa taille (et son occupation mémoire) reste constante et que celui-ci "scanne" les n lignes au dessus du point de lecture...

    en espérant me faire comprendre... merci

  5. #5
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    RandomAccessFile (ou AccessRandomFile ) ca marche pas ?

  6. #6
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Avec RandomAccessFile il y a sans doute moyen d'écrire après la fin de ligne, oui, mais ça va écraser la fin.
    Donc il faut lire le fichier une première fois pour mémoriser la fin du fichier, c'est le plus simple.

    une autre solution pourrait être d'agrandir le fichier de la taille dont on a besoin, de réécrire le fichier depuis la fin pour déplacer toutes les données et enfin d'écrire ce qu'on insère avec quasi zéro occupation mémoire. (comme une défragmentation, mais dans un fichier)

  7. #7
    Membre éprouvé Avatar de sylviadesbois
    Inscrit en
    Mars 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 84
    Par défaut
    Et bien une manière naturelle de faire serait de créer une linkedList de 10 StringBuilder (pour 10 lignes). Toute les 5 secondes tu rajoute ta valeur au StringBuilder stocké à l'indice 0 tu l'écrit et tu efface la valeur stockée au rang 0.
    Mais je suppose que ça doit pas être une bonne façon de faire sinon elle aura déjà été proposée, ou alors je n'ai surement pas compris ce que l'on cherche à faire ici.
    D'ailleurs je vois pas pourquoi je poste ici, ça serais sympa qu'on m'explique pourquoi ma solution ne marcherait pas (après je pourrais aller me fouetter en me lamentant de ne pas m'être mis à la programmation plus tot).

  8. #8
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Des StringBuffer plutôt et une ArrayList devrais faire l'affaire, mais dans l'algorithmie c'est OK.

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Par défaut
    J'ai finalement suivi tes conseils et utilisé une LinkedList<String>

    Simplicité et rapidité !

    Merci à tous pour vos réponses rapides

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBS]Ecrire à la fin d'une ligne
    Par Mammy Potter dans le forum VBScript
    Réponses: 5
    Dernier message: 14/01/2013, 13h56
  2. script shell ecrire à la fin d'une ligne d'un fichier
    Par patricx dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 16/02/2012, 23h11
  3. Ecrire a la fin d'une ligne d'un fichier .txt
    Par Vince_14 dans le forum LabVIEW
    Réponses: 5
    Dernier message: 02/05/2011, 19h45
  4. Comment détecter la fin d'une ligne en C ?
    Par radouane_as dans le forum Débuter
    Réponses: 10
    Dernier message: 08/06/2007, 18h13
  5. ecrire a la fin d'une ligne d'un fichier
    Par warubi dans le forum C++
    Réponses: 6
    Dernier message: 08/02/2007, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo