mise a jour d'un fichier texte

mise a jour d'un fichier texte - Java - Programmation

Marsh Posté le 13-03-2013 à 17:14:50    

bonsoir tou le monde,
 
j'ai un fichier texte sur mon bureau appélé "oui" qui est composé des lignes suivantes:
1.3.6.1.2.1.15.3.1.1.10.0.5.6 = 10.0.5.6
.....
 
j'ai développé un petit code pour lire le fichiers et afficher juste le champs après le séparateur " = "  dans la console de netbeans.
ce que je veux faire c'est mettre a jour ce fichier " oui" en ecrivant dans  le resultat du code afin d'avoir ces lignes  
10.0.5.6
10.0.5.6
10.0.5.6
.....
 
le problème est que les lignes s'ajoutent à la fin du fichier et moi je veux qu'elles remplacent les anciennes
pouriez vous me donner une idée comment réaliser ca??
 
merci

Reply

Marsh Posté le 13-03-2013 à 17:14:50   

Reply

Marsh Posté le 13-03-2013 à 18:01:43    

Il n'y a pas d'API "tout en un" de "rechercher et remplacer" de chaînes dans un fichier texte.
 
Donc tu vas coder les rechercher remplacer, je recommande d'utiliser le  
String.replaceAll(String regex, String replacement)  
parce que les expressions régulières c'est bien pratique
 
Tu lis le fichier en entrée avec un Bufferedreader.
Tu itéres sur les lignes avec un 'readLine',  
chacune des lignes lues est un String
Tu fais ta modification sur la ligne avec le replaceAll (ou replace ou replaceFirst, voir javadoc)
Tu écrits les lignes modifiées dans un fichier de sortie
>BufferedReader reader = new BufferedReader(new FileReader(in));
>PrintWriter writer = new PrintWriter(new FileWriter(out));
>String line = null;
>while ((line = reader.readLine()) != null)  
>  writer.println(line.replaceAll(regex,newstring));
 
et tu n'oublies pas de fermer les ressources close() à la fin
et tu écrases le fichier en entrée avec le fichier de sortie.


Message édité par willy le kid le 13-03-2013 à 18:04:47
Reply

Marsh Posté le 14-03-2013 à 11:20:20    

merci bcp pour ta réponse.
c'est à peu près ce que je cherchais sauf que moi je veux que le fichier lu que tu as nommé dans ton exemple "in" soit le meme que le fichier de sortie out.
de facon à ce que mon code lie une ligne du fichier in et la remplace par la nouvelle valeur puis il passe à la prochaine ligne et ainsi de suite.
le problème est que je sais pas ou placer mon printWriter car a chaque fois il crée de nouveau le fichier.
 
j'espère avoir été claire je sais que c'est pas parfaitement expliqué
 
merci bcp

Reply

Marsh Posté le 14-03-2013 à 11:36:52    

Tu as besoin d'un RandomAccessFile.
Permets de lire et écrire dans un fichier en se positionnant à la position qui va bien. Perso je trouve que les méthodes fournies sont un peu 'barbares' (pas de readline) et moins 'débutant friendly' (attention aux bytes).
http://docs.oracle.com/javase/tuto [...] /rafs.html
 
La lecture d'un fichier ou stream 'in' pour modification  
et versement dans un stream ou fichier out est un grand classique le l'api java.io.
L'avantage est que tu as toujours un streamReader ou streamWriter (ou InputStream ou OutputStream) adapté à ton problème
(fichier texte plat, fichier texte à ligne, gros fichier, fichier binaire ...) ... mais ca implique un 'in' et un 'out'.


Message édité par willy le kid le 14-03-2013 à 11:41:44
Reply

Marsh Posté le 14-03-2013 à 12:03:21    

dans ton dernier poste tu m'a dit d'ecraser mon fichier d'entree par celui de sortie et j'ai trouvé que c'est une très bonne idée voire bcp plus simple a faire qu'autre chose
j'ai essayé d'utiliser la méthode rename() pour renommer le fichier d'entrée en celui de sortie (ce qui est équivalent) à ecraser sauf que ca me retourne une erreur.
as tu une idée comment faire cet ecrasement
 
merci et dsl pour le derangement

Reply

Marsh Posté le 14-03-2013 à 12:18:53    

Je pense que tu n'as pas fais les close() sur les reader et writer et tu ne peux pas renommer un fichier encore ouvert
 
Ensuite, si out existe, tu supprimes in, et tu fais le renameTo. Ca doit le faire.
 
File in = new File ("C:\\toto.txt" );
File out = new File (C:\\toto.avecmodifs.txt" );
 
if (out.exists() ){
  if (in.delete() ){
    out.renameTo(in);
  }
}

Reply

Marsh Posté le 14-03-2013 à 12:48:33    

merci bcp  
ca marche et j'ai le resultat final . vraiment j'ai trouvé mon bonheur sur ce forum vous êtes très très serviables et patients ici.
encore merci et tres bonne journée

Reply

Sujets relatifs:

Leave a Replay

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