[java] écrire pls fois dans un fichier .txt [Résolu/Fermé]

Signaler
Messages postés
56
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
10 mai 2012
-
Messages postés
15934
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 juillet 2020
-
Bonjour,

J'aimerais lire et écrire dans un fichier texte, cependant je souhaiterais à chaque fois introduire des nouvelles lignes tout en conservant le reste.

J'ai essayé de bidouiller quelque chose (cf. code ci-dessous) mais je suis convaincu qu'il y a moyen de faire de manière plus simple et plus propre.

Est-ce que quelqu'un sait m'aider ?
Merci ! :)


import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;


public class WriteText {
	public static void main(String[] args){
	    // Creates file if file doesn't exist to avoid reader error
		File f;
		f=new File("File.txt");
		if(!f.exists()){
			try {
				f.createNewFile();
			} 
			catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		// Initiates FileReader
		FileReader fr = null;
		try {
			fr = new FileReader(f);
		} 
		catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
		// Initiates BufferReader
		BufferedReader br = new BufferedReader(fr);

		// Starts Reading/Writing in file
		try {
			String FileLine; // line of file to be read
			/* if FileLine is null (= if file is empty), print these lines */
			if ((FileLine=br.readLine()) == null){
	        	PrintWriter out = new PrintWriter("File.txt");        	
	    		out.println("First line");
	    		out.println("Another first line");
	            out.println("########");
	            out.print(" ");
	            out.close();				
			}
			/* if File is not empty (=if first text lines have already been 
			 * printed), print new set of lines without erasing the first ones */
			else{
				while((FileLine=br.readLine())!=" "){
					//line = line.trim();
					System.out.println(FileLine);
				}
	        	PrintWriter out = new PrintWriter("File.txt");	        	
	    		out.println("a new line");
	    		out.println("another new line");
	            out.println("########");
	            out.print(" ");
	            out.close();					
			}
		} 
		catch (IOException e1) {
			e1.printStackTrace();
		}	
	}
}

3 réponses

Messages postés
15934
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 juillet 2020
2 629
Effectivement il y a plus simple, en utilisant FileWriter(File file, boolean append)
Tu peux regarder un exemple d'utilisation sur Comment écrire à la fin d'un fichier ?
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60406 internautes nous ont dit merci ce mois-ci

Messages postés
56
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
10 mai 2012

merci. :) je regarderais ça demain au boulot.

Salut,

Par défaut, on "écrase" le contenu éventuel du fichier:
PrintWriter out = new PrintWriter("File.txt");

Idem avec:
PrintWriter out = new PrintWriter("File.txt", false);


Pour écrire à la suite (append):
PrintWriter out = new PrintWriter("File.txt", true);


Cordialement,

Dan
Messages postés
56
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
10 mai 2012

Bonjour,

J'ai suivis vos conseils et malheureusement ça ne fonctionne pas. Peut-être ais-je mal compris ? En fait, mon compilateur me dit que l'expression FileWriter(file, bool) n'existe pas. =/

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;


public class FileIO {
	private static File f = new File("OutputFile.txt");
	
	public FileIO() throws IOException{
		if (!f.exists()){
			f.createNewFile();
		}
	}
	
	public static void WriteInFile(String TextLine) throws FileNotFoundException{
		PrintWriter out = new PrintWriter(f, true);
		out.println(TextLine);
		out.close();
	}

	public static void main(String[] args) throws FileNotFoundException{
		String number= null;
		for (int i = 0; i<10; i++){
			number = String.valueOf(i);
			FileIO.WriteInFile(number + " Hello");
		}
	}
	
}
Messages postés
56
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
10 mai 2012

en fait si je comprends bien ce n'est pas PrintWriter qui possède la possibilité d'écrire à la suite mais FileWriter (comme le suggérait KX).

Voici, ci-dessous, mon nouveau code. Ça fonctionne mais j'aimerais pouvoir revenir à la ligne à chaque nouvelle écriture et non mettre tout à la suite. Je cherches...
=/


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;


public class FileIO {
	private static File f = new File("OutputFile.txt");
	private static FileWriter w = null;
	
	public FileIO() throws IOException{
		if (!f.exists()){
			f.createNewFile();
		}
	}
	
	public static void WriteInFile(String TextLine) throws IOException {
		try{
		     w = new FileWriter(f, true);
		     w.write(TextLine,0,TextLine.length());
		}catch(IOException ex){
		    ex.printStackTrace();
		}finally{
		  if(w != null){
		     w.close();
		  }
		}
	}

	public static void main(String[] args) throws IOException{
		String number= null;
		for (int i = 0; i<10; i++){
			number = String.valueOf(i);
			FileIO.WriteInFile(number + "_Hello");
		}
	}
	
}
Messages postés
56
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
10 mai 2012

Re-bonjour,

J'ai trouvé une solution à mon problème de saut de ligne. Ce n'est peut-être pas la plus efficace mais ça fonctionne. :)

	public static void main(String[] args) throws IOException{
		String number= null;
		String newline = System.getProperty("line.separator");
		for (int i = 0; i<10; i++){
			number = String.valueOf(i);
			FileIO.WriteInFile(number + "_Hello" + newline);

		}
	}
Messages postés
15934
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 juillet 2020
2 629
Soit tu fais une vraie classe, soit tu mets tout en static mais le mélange des deux comme tu l'as fait alourdi inutilement le code, et donc complexifie son utilisation pour rien !

import java.io.FileWriter;
import java.io.IOException;

public class Test
{
    private static final String SAUTLIGNE = System.getProperty("line.separator");
    
    public static void append(String fileName, String line) throws IOException 
    {
        FileWriter file = new FileWriter(fileName, true);
        file.write(line+SAUTLIGNE);
        file.close();
    }
    
    public static void main(String[] args) throws IOException
    {        
        for (int i = 0; i<10; i++)
            append("OutputFile.txt",i+"_Hello");
    }    
}