mise a jour d'un fichier texte - Java - Programmation
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.
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
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'.
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
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);
}
}
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
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