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 dans un fichier à un endroit précis


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 120
    Par défaut Ecrire dans un fichier à un endroit précis
    Bonjour,

    je voudrais écrire dans un fichier à un endroit précis. Je recherche une chaine, et quand je l'ai trouvé, je la remplace.


    voila ce que j'ai fait (j'y suis presque, il me reste plus qu'a remplacer ma chaine par une autre sans écraser le reste du fichier
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    //Ecriture dans un fichier
    	private boolean WriteFichier(String sFichier, String sChaineRecherchee, String sNewChaine)
    	{
    		boolean b = false;
    		try 
    		{
    			BufferedReader br = new BufferedReader(new FileReader(sFichier));
    			FileWriter fw = new FileWriter(sFichier);
    			BufferedWriter bw = new BufferedWriter(fw);
    			int i = 1; //initialisation du numero de ligne
    			String line = "";
    			while ((line = br.readLine()) != null)
    			{
    				if ( line.indexOf(sChaineRecherchee) != -1)
    				{
    					???????????????????????????????????????????
    					bw.write(line, 0, line.length());
    					bw.newLine();
    					bw.flush();
    				}
    				i++;
    			}
    			br.close();
    		} 
    		catch (IOException e) 
    		{
    			System.out.println("Erreur lors de l'ecriture dans le fichier "+sFichier);
    			e.printStackTrace();
    		}
     
    		return b;
    	}
    Merci (g regardé la FAQ mais j'ai pas trouvé)

  2. #2
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Tu n'as pas le choix : il faut réécrire tout le fichier. C'est intrinsèque aux systèmes de fichiers.

    Bon courage.

  3. #3
    Membre confirmé Avatar de seb55555
    Profil pro
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Par défaut
    Peut être peux tu faire cela avec un RandomAccessFile

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    En effet tu y es presque, mais ça risque fortement de ne pas fonctionner :p
    Tout simplement car tu écris sur le fichier que tu lis, y a pas comme un problème là ? :p On va donc passer par un fichier temporaire et si il n'y a pas d'erreur, on renomme le temporaire à la fin.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
      public static boolean changeLineInFile(String pathFichier, String toChange, String newLine) {
        boolean isOk = false;
        try {
          // flux en lecture sur le fichier de base
          BufferedReader reader = new BufferedReader(new FileReader(pathFichier));
          // création d'un fichier temporaire
          File destination = new File(pathFichier+".tmp");
          destination.createNewFile();
          // flux d'écriture sur le fichier temporaire
          PrintWriter writer = new PrintWriter(destination);
          try {
          String line = null;
          while ((line = reader.readLine()) != null) {
            // si la ligne lue n'est pas vide
            if (!line.isEmpty()) {
              // si elle contient la chaine recherchée alors on la remplace
              if (line.indexOf(toChange) != -1) {
                writer.println(newLine);
              // sinon on la remplace pas :p
              } else {
                writer.println(line);
              }
            }
          }
          // arrivé ici pas d'erreur tout s'est bien passé
          isOk = true;
          } finally {
            // fermeture des flux dans tous les cas
            reader.close();
            writer.close();
          }
          // finalement on peux renommer le fichier temporaire
          destination.renameTo(new File(pathFichier));
        } catch (IOException ioe) {
          // erreur durant la réecriture
          ioe.printStackTrace();
        }
        return isOk;
      }

  5. #5
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Citation Envoyé par seb55555 Voir le message
    Peut être peux tu faire cela avec un RandomAccessFile
    L'utilisation de RandomAccessFile est intéressante dans le seul cas où l'on est certain que la chaine à remplacer aura exactement la même taille que la nouvelle chaine.

Discussions similaires

  1. [Python 3.X] Ecrire dans un fichier à un index de ligne précis
    Par nilslauwers dans le forum Général Python
    Réponses: 8
    Dernier message: 20/05/2015, 22h50
  2. Réponses: 15
    Dernier message: 04/06/2008, 14h44
  3. Réponses: 2
    Dernier message: 13/04/2006, 07h13
  4. Réponses: 6
    Dernier message: 17/12/2005, 19h27
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

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