réécrire dans un fichier texte
Bonjour, je souhaite réécrire dans un fichier texte:
Exemple, ouvir à nouveau le fichier nomFichier, aller à la fin puis continuer d'écrire. Que faut-il mettre entre le fw.close() et le fw.write() qui suit?
Code:
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
| package testecriturefichier;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
String nomFichier;
System.out.println("Comment voulez-vous nommer le fichier texte (d'extension .txt) ? ");
nomFichier = Clavier.lireString();
FileWriter fw = new FileWriter("C:\\Temp\\"+nomFichier+".txt");
fw.write("Bonjour\r\n");//retour à la ligne
fw.write("Ecriture dans le fichier OK !");
fw.flush();
fw.close();
fw.write("Suite ecriture dans le fichier OK !");
}
} |
Merci pour vos informations,
Cordialement,
Malcolm
Attention ce n'est pas la solution
En effet, si vous faites comme ça, votre fichier ne contiendra que ce que vous pensiez ajouter.
Vous ne pouvez pas utiliser un Writer basé sur un File pour réaliser ce genre d'opération.
Vous avez deux solutions :
La première consiste à se limiter à l'usage de File et d'un Writer + un Reader. Dans ce cas, utilisez un conteneur comme un Vector par exemple et commencer par lire votre fichier en remplissant votre Vector avec chaque ligne lue. Une fois fait, au lieu de chercher à ajouter vos lignes directement au fichier, ajoutez-les au vecteur. A la fin, réaliser votre opération d'écriture en vidant l'intégralité du vecteur dans le fichier.
La seconde, et de loin la plus propre, utilisez un RandomAccessFile. Il vous suffira de placer le pointeur à la fin du fichier à l'aide de sa méthode seek puis vous pourrez écrire directement vos lignes supplémentaires.
Désolé mais c'est totalement faux
Le code en question ne répond pas à la question qui je le rappelle consiste à ajouter des lignes dans un fichier.
Le seul moyen de le faire simplement est d'utiliser un RandomAcessFile.
Imaginons un fichier.txt situé sous C:\fichier.txt par exemple.
Ce dernier contiendrai les deux lignes de textes suivantes :
Ligne1
Ligne2
Objectif, ajouter les lignes Ligne3 et Ligne4.
Si vous exploiter la méthode proposée avec un FileWriter, votre fichier ne contiendra que Ligne3 et Ligne4, Ligne1 et 2 auront été écrasées !
Dans ce cas il faut faire comme suit :
Code:
1 2 3 4 5 6 7 8
|
File fichierTravail = new File("C:\\fichier.txt");
RandomAcessFile manipulateur = new RandomAcessFile(fichierTravail, "rw");
manipulateur.seek(manipulateur.length());
// A partir de là, il ne reste plus qu'à écrire les lignes que l'on veut ajouter.
// Pour cela il existe différentes méthodes, aussi cet exemple n'en exploitera qu'une.
manipulateur.writeUTF("Ligne supplémentaire");
manipulateur.close(); |
Voilà, je ne vois pas d'autre solutions plus simple. Attention toutefois, la méthode que j'utilise dans cet exemple sous entend évidement que le fichier texte manipulé est encodé au format UTF-8.
Pour finir, je préciserai que celon la documentation de l'API java de sun, le constructeur new FileWriter("nomfichier", true) n'existe pas...