Java : écrire dans un fichier

Résolu/Fermé
otis182 Messages postés 18 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 14 avril 2005 - 8 déc. 2004 à 20:46
Clem-Tech Messages postés 1 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 14 juin 2017 - 14 juin 2017 à 14:43
Bonjour !
Je souhaiterais écrire dans un fichier à partir d'une application Java.
Après avoir lu et parfois rien compris à des tas de tuto, je n'arrive toujours pas à gérer l'écriture dans un fichier de type .txt .
Quelqu'un n'aurait pas des explications avec exemple si possible, voire une méthode permettant d'écrire dans un fichier ??
Je dois rendre mon application demain !
MerKi de votre coup de pouce !!
GrEG
A voir également:

11 réponses

public void ecrire(String nomFic, String texte)
		{
			//on va chercher le chemin et le nom du fichier et on me tout ca dans un String
			String adressedufichier = System.getProperty("user.dir") + "/"+ nomFic;
		
			//on met try si jamais il y a une exception
			try
			{
				/**
				 * BufferedWriter a besoin d un FileWriter, 
				 * les 2 vont ensemble, on donne comme argument le nom du fichier
				 * true signifie qu on ajoute dans le fichier (append), on ne marque pas par dessus 
				 
				 */
				FileWriter fw = new FileWriter(adressedufichier, true);
				
				// le BufferedWriter output auquel on donne comme argument le FileWriter fw cree juste au dessus
				BufferedWriter output = new BufferedWriter(fw);
				
				//on marque dans le fichier ou plutot dans le BufferedWriter qui sert comme un tampon(stream)
				output.write(texte);
				//on peut utiliser plusieurs fois methode write
				
				output.flush();
				//ensuite flush envoie dans le fichier, ne pas oublier cette methode pour le BufferedWriter
				
				output.close();
				//et on le ferme
				System.out.println("fichier créé");
			}
			catch(IOException ioe){
				System.out.print("Erreur : ");
				ioe.printStackTrace();
				}

		}
77
désolé d'être pointilleux mais il ne faut pas appeler le close de l'output dans le block try mais toujours dans le bloc finally. Si une exception est levée avant qu'un Stream ouvert n'ai pu être fermé, alors le fichier cible restera locké... en plaçant l'appel à la méthode dans le block finally on est sûr que le Stream sera fermé quoiqu'il arrive
0
Sinon tu peux aussi ajouter coller ca dans une classe Writer, et pour t'en servir tu mets: Writer.WriteFile ( "Texte", "Nom du dossier", "Nom du fichier.txt")

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Writer{

public static void WriteFile (String Text, String directoryName, String fileName) throws IOException{

String directoryPath = System.getProperty("user.dir") + "\\" + directoryName + "\\";
String filePath = System.getProperty("user.dir") + "\\" + directoryName + "\\" + fileName ;

//Getting filePath and directoryPath with the file name and the directory name.

File file = new File(filePath);
File dir = new File(directoryPath);


if (dir.exists() && dir.isDirectory() && file.exists()){

try {

FileWriter fw = new FileWriter(filePath, true);
BufferedWriter output = new BufferedWriter(fw);

output.write(Text);
output.flush();
output.close();

System.out.println("Text written!");

} catch (IOException ioe) {
// TODO Auto-generated catch block
ioe.printStackTrace();
} catch (java.lang.NullPointerException e){
System.out.println ("Error");
e.printStackTrace();
}

}

//Write the text if the file is already created

else{

if (dir.exists() && dir.isDirectory()){

file.createNewFile();
System.out.println("New file at " + filePath);

//Create a new file if the directory already exists, but neither the file

try {
FileWriter fw = new FileWriter(filePath, true);
BufferedWriter output = new BufferedWriter(fw);

output.write(Text);
output.flush();
output.close();

System.out.println("Text written!");

} catch (IOException ioe) {
// TODO Auto-generated catch block
ioe.printStackTrace();
} catch (java.lang.NullPointerException e){
System.out.println ("Error");
e.printStackTrace();
}
//Write the text in the file
}
else{
dir.mkdir();
System.out.println("New directory at " + directoryPath);
file.createNewFile();
System.out.println("New file at " + filePath);
try {
FileWriter fw = new FileWriter(filePath, true);
BufferedWriter output = new BufferedWriter(fw);

output.write(Text);
output.flush();
output.close();

System.out.println("Text written!");

} catch (IOException ioe) {
// TODO Auto-generated catch block
ioe.printStackTrace();
} catch (java.lang.NullPointerException e){
System.out.println ("Error");
e.printStackTrace();
}
}
}

}

}

Désolé je l'ai mis en anglais..
Je l'ai écrit et je pense que ca devrait marcher.. En tout cas ca marche avec moi
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
12 mai 2012 à 00:11
bonsoir, ça fait plus de deux ans maintenant, je crois qu'il doit avoir trouvé non ?
0
Je sais que je poste mon commentaire un peu tard après ce forum, mais
1) j'avoue que je n'ai pas regardé la date
2) ça ne me coûte rien de mettre mon post
3) moi aussi j'ai un peu galéré pour faire ce code, donc si je peux éviter à quelqu'un d'autre de galérer, tant mieux vu que
4) ce forum est le premier sur lequel on tombe si on fait une recherche google...
Bref, je n'aiderai pas otis182, mais j'espère pouvoir aider quelqu'un d'autre qui veut écrire dans un fichier créé automatiquement...
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
16 mai 2012 à 18:05
y a pas de soucis..
0
Une class bien utile pour la lecture et écriture de données d'un fichier à un autre (en JAVA).

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class Utilities {
	private static void writeFile(String fileContent, String filePathOutput) {
		try {

			// BufferedWriter a besoin d'un FileWriter, les 2 vont ensemble, on
			// donne comme argument le nom du fichier et false signifie qu'on
			// écrase le contenu du fichier et qu'on ne fait pas d'append sur le
			// contenu.
			FileWriter fileWriter = new FileWriter(filePathOutput, false);

			// Le BufferedWriter output auquel on donne comme argument le
			// fileWriter écrase le contenu déjà présent dans le fichier.
			BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

			// On écrit dans le fichier ou plutot dans le bufferedWriter qui
			// sert de tampon(stream)
			bufferedWriter.write(fileContent);

			bufferedWriter.flush();
			bufferedWriter.close();
			System.out.println("Fichier créé");
		} catch (IOException ioe) {
			System.err
					.println("Erreur levée de type IOException au niveau de la méthode "
							+ "writeFile(...) : ");
			ioe.printStackTrace();
		}
	}// End writeFile(...)

	public static void readFile(String filePathInput, String filePathOutput) {

		Scanner scanner = null;
		String line = null;
		StringBuffer str = new StringBuffer();
		try {
			scanner = new Scanner(new File(filePathInput));

			// On boucle sur chaque champ detecté
			while (scanner.hasNextLine()) {
				line = scanner.nextLine();

				if (line != null)
					str.append(line + "\r\n");
			}

			scanner.close();
		} catch (FileNotFoundException e) {
			System.err.println("Erreur levée de type FileNotFoundException"
					+ " au niveau de la méthode " + "readFile(...) : ");
			e.printStackTrace();
		}

		Utilities.writeFile(str.toString(), filePathOutput);
	}// End readFile(...)

	public static void formatSQLFileContentToIntegrateThisInTheJAVACode(
			String filePathInput, String filePathOutput) {

		Scanner scanner = null;
		String line = null;
		StringBuffer str = new StringBuffer();
		try {
			scanner = new Scanner(new File(filePathInput));

			// On boucle sur chaque champ detecté
			while (scanner.hasNextLine()) {
				line = scanner.nextLine();

				if (line != null)
					str.append(".append(\"" + line + " \")\r\n");
			}

			scanner.close();
		} catch (FileNotFoundException e) {
			System.err
					.println("Erreur levée de type FileNotFoundException"
							+ " au niveau de la méthode "
							+ "formatSQLFileContentToIntegrateThisInTheJAVACode(...) : ");
			e.printStackTrace();
		}

		Utilities.writeFile(str.toString(), filePathOutput);
	}// End formatSQLFileContentToIntegrateThisInTheJAVACode(...)
}// End public class Utilities
12
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 73
22 oct. 2012 à 17:58
ça marche parfaitement.
il faut juste créer des instances de "Utilities" dans une class main et de jouer avec les fichiers.
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
8 déc. 2004 à 22:18
8
Deux manières différentes de lire un fichier et une manière pour écrire un fichier (via le langage JAVA) :

package com.test;

import java.io.*;

public class A {

	public static void main(String[] args) {
		String pathFrom = "c:\\folderFrom\\jaros.jar";
		byte[] tab = lire1(pathFrom);

		String pathTo = "C:\\folderTo\\jaros.jar";
		ecrire(pathTo, tab);

		System.out.println("test");
	}

	public static byte[] lire1(String pathFrom) {
		// Lire le fichier
		byte[] tabReadData = null;
		File file = new File(pathFrom);

		try {
			FileInputStream fin = new FileInputStream(file);
			tabReadData = new byte[(int) file.length()];
			fin.read(tabReadData);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return tabReadData;
	}

	public static byte[] lire2(String pathFrom) {
		File file = new File(pathFrom);
		byte[] fileData = new byte[(int) file.length()];
		DataInputStream dis;
		try {
			dis = new DataInputStream(new FileInputStream(file));
			dis.readFully(fileData);
			dis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return fileData;
	}

	public static void ecrire(String pathTo, byte[] tab) {
		try {
			FileOutputStream fos = new FileOutputStream(pathTo);
			fos.write(tab);
			fos.close();
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
	}
}

6

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,
Je viens un peu tard par rapport aux messages mais on ne sait jamais :)
Déjà merci beaucoup Aminata pour ta réponse, j'ai cherché pendant longtemps comment le faire mais je dois avouer que je ne comprenais pas grand chose je début en Java et j'ai un projet à faire pour mon BTS IG dans ce langage ^^"

Il y a juste un soucis, dans le texte que je souhaite sauvegarder, s'il y a des sauts de lignes, ils ne sont pas pris en compte lors de la sauvegarde, pourtant j'ai testé avec un System.out.println(monTexte); ça affichait bien le texte avec les sauts de lignes :S

Pourrais-tu m'aider?
Merci d'avance.
4
En ce qui concerne les sauts de ligne j'ai trouvé assez rapidement finalement, il suffisait de faire une boucle qui parcourait la chaine de caractères lettre par lettre et dès qu'il trouvait le code ASCII 10 ou 13 (pour le saut de ligne donc) il insérait un newLine.
3
Salut papillon
si tu récupères un String au lieu d'un int il faut faire ça :

int i=Integer.parseInt(s);

où s est le String récupéré dans le fichier.
Et là tu as stocké ton entier dans i.

Attention à être sûr que tu as un entier dans s, sinon tu vas
lever une exception Illegal Number Format Exception ou un truc comme ça.
1
avec un peu de code ça serait plus simple pour te répondre
0
togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009 8
17 mai 2009 à 20:06
http://java.sun.com/j2se/1.4.2/docs/api/java/io/PrintWriter.html
http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
8 déc. 2004 à 22:15
Salut

http://java.sun.com/docs/books/tutorial/essential/io/

Chouba,
Pochard d'assaut .. 
-1
papillon2000 Messages postés 106 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 12 janvier 2010 15
11 avril 2009 à 20:23
je veux ecrire une valeur entiere (int )dan un fichier mais le probléme je récupére pas la bonne valeur mais je récupére un code aul ieu d'une valuere entiere.
-2