[java] écrire pls fois dans un fichier .txt

Résolu/Fermé
moussecp Messages postés 56 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 10 mai 2012 - 9 août 2011 à 17:42
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 10 août 2011 à 12:25
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();
		}	
	}
}

A voir également:

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 août 2011 à 17:52
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
moussecp Messages postés 56 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 10 mai 2012
9 août 2011 à 20:13
merci. :) je regarderais ça demain au boulot.
0
Utilisateur anonyme
10 août 2011 à 08:12
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
0
moussecp Messages postés 56 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 10 mai 2012
10 août 2011 à 10:40
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");
		}
	}
	
}
0
moussecp Messages postés 56 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 10 mai 2012
10 août 2011 à 11:00
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");
		}
	}
	
}
0
moussecp Messages postés 56 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 10 mai 2012
10 août 2011 à 11:09
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);

		}
	}
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 août 2011 à 12:25
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");
    }    
}
0