Écrire dans un fichier en Java
Cet article explique comment écrire des données dans un fichier texte en Java. La solution crée le fichier s'il n'existe pas ou tronque le fichier avant de l'écrire s'il existe déjà.
Il existe plusieurs méthodes et classes que nous pouvons utiliser pour écrire dans un fichier en Java. En voici quelques uns:
1. Utilisation Files
class
Avec Java 7, nous pouvons utiliser le Classe de fichiers du package NIO, qui fournit diverses méthodes utilitaires pour effectuer des opérations sur les fichiers et les répertoires. Il propose des méthodes telles que readAllLines()
, readAllBytes()
, newBufferedWriter()
, et write()
qui peut être utilisé pour lire le contenu d'un fichier et écrivez du texte dans le fichier de manière efficace.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.io.BufferedWriter; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; class Main { public static void main(String[] args) { Path path = Paths.get("foo.out"); String text = "sample text"; try (BufferedWriter bw = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { bw.write(text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
Avec Java 11, nous pouvons également utiliser le Files.writeString()
méthode pour écrire une chaîne dans un fichier en utilisant le jeu de caractères et les options spécifiés. Il renvoie le chemin du fichier et lancera un IOException
si une erreur d'E/S se produit lors de l'écriture dans le fichier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; class Main { public static void main(String[] args) { Path path = Paths.get("foo.out"); String text = "sample text"; try { Files.writeString(path, text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
2. Utilisation FileWriter
avec BufferedWriter
class
FileWriter est une classe pratique pour écrire des flux de caractères en utilisant le codage de caractères et la taille du tampon par défaut. Nous pouvons créer une instance de cette classe avec le nom de fichier et utiliser le write()
méthode pour écrire le texte dans le fichier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.io.File; import java.io.FileWriter; import java.io.IOException; class Main { public static void main(String[] args) { File file = new File("foo.out"); String text = "sample text"; try (FileWriter fw = new FileWriter(file)) { fw.write(text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
Il est conseillé d'envelopper un BufferedWriter
autour de FileWriter
car ses opérations d'écriture sont très coûteuses. Le BufferedWriter
La classe est utilisée pour écrire des caractères mis en mémoire tampon dans un fichier. Il améliore les performances d'écriture en réduisant le nombre d'opérations sur le disque. Nous pouvons créer une instance de cette classe avec un FileWriter
objet et utiliser le write()
méthode pour écrire le texte dans le fichier.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; class Main { public static void main(String[] args) { File file = new File("foo.out"); String text = "sample text"; try (FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw)) { bw.write(text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
3. Utilisation de la bibliothèque de Guava
La bibliothèque Guava fournit un moyen pratique d'écrire des données dans des fichiers en Java. Il a une méthode statique Files.asCharSink(File, Charset, FileWriteMode) method
du com.google.common.io.Files
classe, qui peut être utilisée pour écrire des données de caractères dans le fichier donné en utilisant le jeu de caractères donné. Lorsqu'aucun mode n'est fourni, le fichier sera tronqué avant l'écriture, ou un nouveau fichier est créé lorsque le fichier cible n'existe pas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; class Main { public static void main(String[] args) { File file = new File("foo.out"); String text = "sample text"; try { Files.asCharSink(file, StandardCharsets.UTF_8).write(text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
4. Utiliser Apache Commons IO
Apache Commons IO est une autre bonne bibliothèque qui peut être utilisée pour effectuer une opération d'écriture sur une plate-forme sur un fichier. Nous pouvons utiliser le writeStringToFile(File, String, Charset) méthode de org.apache.commons.io.FileUtils
classe pour écrire une chaîne dans un fichier. Si le fichier existe déjà, alors le fichier sera tronqué avant l'écriture.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; class Main { public static void main(String[] args) { File file = new File("foo.out"); String text = "sample text"; try { FileUtils.writeStringToFile(file, text, StandardCharsets.UTF_8); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
5. Utilisation PrintWriter
avec BufferedWriter
Nous pouvons utiliser le PrintWriter
classe dans les situations qui nécessitent l’écriture de caractères plutôt que d’octets. Cependant, sans mise en mémoire tampon, chaque invocation de PrintWriter print()
La méthode entraînerait la conversion des caractères en octets qui seraient ensuite écrits immédiatement dans le fichier, ce qui peut être très inefficace. Par conséquent, il est recommandé de mettre en mémoire tampon la sortie de PrintWriter
au fichier avec BufferedWriter
, comme indiqué ci-dessous:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.io.*; class Main { public static void main(String[] args) { File file = new File("foo.out"); String text = "sample text"; try (FileWriter fw = new FileWriter(file); BufferedWriter bf = new BufferedWriter(fw); PrintWriter out = new PrintWriter(bf)) { out.print(text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
6. Utilisation FileOutputStream
avec OutputStreamWriter
La FileOutputStream
la classe peut être utilisée pour écrire des données binaires dans un fichier. Nous pouvons créer une instance de cette classe avec le nom de fichier et utiliser le write()
méthode pour écrire les octets dans le fichier. Pour écrire des caractères au lieu d'octets, nous devrions l'utiliser avec un OutputStreamWriter
, qui peut servir de pont entre les flux de caractères et les flux d'octets. Pour une efficacité optimale, il est conseillé d'emballer un BufferedWriter
autour de OutputStreamWriter
dont les opérations d'écriture sont coûteuses.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.io.*; import java.nio.charset.StandardCharsets; class Main { public static void main(String[] args) { File file = new File("foo.out"); String text = "sample text"; try (FileOutputStream fos = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8); BufferedWriter bf = new BufferedWriter(osw)) { bf.write(text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
Nous pouvons également utiliser un PrintStream
pour ajouter des fonctionnalités à un flux de sortie. Mais tous les caractères imprimés par un PrintStream
sont convertis en octets à l'aide de l'encodage de caractères par défaut de la plate-forme.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; class Main { public static void main(String[] args) { File file = new File("foo.out"); String text = "sample text"; try (FileOutputStream fos = new FileOutputStream(file); PrintStream out = new PrintStream(fos)) { out.print(text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
Il s'agit d'écrire dans un fichier en Java.
Regarde aussi: