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

Langage Java Discussion :

Placement du curseur dans un fichier


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Par défaut Placement du curseur dans un fichier
    Bonjour,
    Je voudrast écrire dans un fichier à un endroit précis, j'ai trouvé comment écrire à la fin du fichier (car le curseur est toujours positionné à la fin)seulement je voudrait le placer à la suite d'une chaine de caractère, voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    try
        {
     
    	FileReader fr = new FileReader(adressedufichier);
    	BufferedReader input = new BufferedReader(fr); 
    	FileWriter fw = new FileWriter(adressedufichier, true);
    	BufferedWriter output = new BufferedWriter(fw);
     
    	while(a <50) 
    	    {
    		test = input.readLine();
    		System.out.println("test : [" + test+ "]");
    		if(test.equals("<AGENDA Nom='Agenda perso'>")){
    		    output.write("test");
    		    output.flush();
    		    output.close();
    		}
    		a++;
    	    }
    	input.close();
        }
    catch(IOException ioe){System.out.println("erreur : " + ioe );}
    Seulement ce code écrit à la fin du fichier

    J'ai vu qu'il existait les fonctions skipBytes et seek(long pos) seulement je ne connais pas le nombre de bits lu à ce moment....
    Quelqu'un aurait il une idée?

    Merci

  2. #2
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 095
    Par défaut A mon avis...
    Je dirais que par définition, un système de fichier organise ses données de manière purement séquentielle. En clair, je ne vois pas comment il serait possible d'insérer quelque chose.
    Je penses qu'il faut plutot ouvrir le fichier d'origine en lecture, de créer un fichier temporaire en sortie, puis d'écrire dans le fichier temporaire la ligne lue dans le fichier d'origine après modification là ou il faut.
    A la fin, on ferme les deux fichiers, on supprime l'original, et on renomme le temporaire comme l'original.
    A la fin, on a ce que lon veut, le même fichier avec quelque chose en plus dedans, là ou on veut.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Par défaut
    J'ai finalement trouvé une solution, je met le code pour ceux que ca interesse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    String adressedufichier = "Agenda.xml";
     
    try{
     RandomAccessFile file = new RandomAccessFile("Agenda.xml","rw");
     
    long filePointer = 0;
    String s = "";
     
    while (!s.equals("<AGENDA Nom='"+ajout.getNomA()+"'>")){
        s = file.readLine();
        filePointer = file.getFilePointer();
    }
    	file.seek(filePointer);
             file.writeBytes("\n test \n");
             file.close();
     
        }catch(IOException ioe){System.out.println("erreur : " + ioe);}

    Par contre j'ai un nouveau petit souci, ce code écrit par dessus celui qui est dans le fichier, existe-il une option à rajouter au RandomAccessFile pour écrire à la suite?Sans rien écraser? merci


    PS : (pour pursang) Ce code montre qu'il est possible d'ajouter des lignes dans un fichier sans être obliger d'en recréer un à chaque fois, en plus je pense que cette solution doit prendre pas mal de temps à l'exécution nan?

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Vous avez raison tous les deux ... et surtout pursang. Tu ne peux pas insérer quelque chose dans un fichier sans disposer quelque part d'un système de tampon pour copier séquentiellement l'ensemble, même avec le RandomAccessFile.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Par défaut
    Ah deg!! alors il faut que j'utilise en plus un BufferedReader ? sans forcément recréer un fichier.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour insérer ailleurs qu'à la fin d'un fichier, il n'y a pas de choix, il faut lire la première partie et l'écrire dans un fichier temporaire, ajouter le morceau dans le fichier temporaire, lire la fin et la mettre dans le fichier temporaire. Aucun os à ma connaissance n'autorise les insertion dans le fichier, juste l'ajout en fin. Et pour une bonne raison, physiquement, les morceaux de ton fichier se suivent, insérer quelque chose reviendrais à tout lire, tout déplacer et puis seulement insérer le bout demander. Comme c'est difficile à faire proprement et efficacement au niveau du système de fichier, on laisse les application appliquer les algorithme qui leur conviennenet le plus pour faire ça, via des fichiers temporaires.

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 154
    Par défaut
    Ca y est j'ai trouvé une solution, j'ai fait ce que tu m'a dit il me reste plus qu'a renommer mon fichier et supprimer le précédent. JE met mont code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     RandomAccessFile file = new RandomAccessFile("Agenda.xml","rw"); 
     RandomAccessFile filetmp = new RandomAccessFile("test.xml","rw");
     //BufferedWriter br = new BufferedWriter(file);
     long filePointer = 0;
     long longueur=file.length();
     String s = "";
     while (!s.equals("<AGENDA Nom='"+ajout.getNomA()+"'>")){
         s = file.readLine();
         filetmp.writeBytes(s+"\n");
         filePointer = file.getFilePointer(); 
     }
     filetmp.seek(filePointer);
     filetmp.writeBytes("test");
     while(filePointer < longueur){
         s = file.readLine();
         filetmp.writeBytes(s+"\n");
         filePointer = file.getFilePointer();
     }
     
     file.close();
    En tout cas merci beacoup de m'avoir aidé

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2010, 20h39
  2. Utilisation de positionnement de curseur dans un fichier
    Par roswellboy dans le forum Windows
    Réponses: 1
    Dernier message: 05/04/2008, 19h02
  3. Probleme de noob (curseur dans un fichier)
    Par freezerhm dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 05/07/2007, 19h38
  4. Placement du curseur dans une scrollbar
    Par elsakapus dans le forum MFC
    Réponses: 3
    Dernier message: 20/02/2007, 21h15
  5. Positionner le curseur dans un fichier
    Par be_tnt dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 15/05/2006, 14h30

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