Vous êtes sur la page 1sur 10

26/12/2023 07:03 Java - Fichiers et E/S

Anglais Français

Java-Fichiers et E/S

Le package java.io contient presque toutes les classes dont vous pourriez avoir
besoin pour effectuer des entrées et des sorties (E/S) en Java. Tous ces flux
représentent une source d’entrée et une destination de sortie. Le flux du package
java.io prend en charge de nombreuses données telles que des primitives, des
objets, des caractères localisés, etc.

Flux
Un flux peut être défini comme une séquence de données. Il existe deux types de
flux -

InPutStream - Le InputStream est utilisé pour lire les données d'une source.

OutPutStream - Le OutputStream est utilisé pour écrire des données vers


une destination.

Java fournit une prise en charge solide mais flexible des E/S liés aux fichiers et aux
réseaux, mais ce didacticiel couvre les fonctionnalités très basiques liées aux flux et
aux E/S. Nous verrons les exemples les plus utilisées un par un -

Flux d'octets

Les flux d'octets Java sont utilisés pour effectuer l'entrée et la sortie d'octets de 8
bits. Bien qu'il existe de nombreuses classes liées aux flux d'octets, les classes les
plus fréquemment utilisées sont FileInputStream et FileOutputStream . Voici un
exemple qui utilise ces deux classes pour copier un fichier d'entrée dans un fichier
de sortie -

Exemple

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 1/10
26/12/2023 07:03 Java - Fichiers et E/S

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFile {

public static void main(String args[]) throws IOException {


FileInputStream in = null;
FileOutputStream out = null;

try {
in = new FileInputStream("input.txt");
out = new FileOutputStream("output.txt");

int c;
while ((c = in.read()) != -1) {
out.write(c);
}
}finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}

Ayons maintenant un fichier input.txt avec le contenu suivant -

This is test for copy file.

Dans l'étape suivante, compilez le programme ci-dessus et exécutez-le, ce qui


entraînera la création d'un fichier output.txt avec le même contenu que celui que
nous avons dans input.txt. Mettons donc le code ci-dessus dans le fichier
CopyFile.java et procédons comme suit -

$javac CopyFile.java
$java CopyFile

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 2/10
26/12/2023 07:03 Java - Fichiers et E/S

Flux de personnages

Les flux Java Byte sont utilisés pour effectuer l'entrée et la sortie d'octets de 8 bits,
tandis que les flux Java Character sont utilisés pour effectuer l'entrée et la sortie
pour l'Unicode 16 bits. Bien qu'il existe de nombreuses classes liées aux flux de
caractères, les classes les plus fréquemment utilisées sont FileReader et
FileWriter . Bien qu'en interne, FileReader utilise FileInputStream et FileWriter
utilise FileOutputStream, mais ici la différence majeure est que FileReader lit deux
octets à la fois et FileWriter écrit deux octets à la fois.

Nous pouvons réécrire l'exemple ci-dessus, qui utilise ces deux classes pour copier
un fichier d'entrée (ayant des caractères Unicode) dans un fichier de sortie -

Exemple

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

public class CopyFile {

public static void main(String args[]) throws IOException {


FileReader in = null;
FileWriter out = null;

try {
in = new FileReader("input.txt");
out = new FileWriter("output.txt");

int c;
while ((c = in.read()) != -1) {
out.write(c);
}
}finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 3/10
26/12/2023 07:03 Java - Fichiers et E/S

}
}

Ayons maintenant un fichier input.txt avec le contenu suivant -

This is test for copy file.

Dans l'étape suivante, compilez le programme ci-dessus et exécutez-le, ce qui


entraînera la création d'un fichier output.txt avec le même contenu que celui que
nous avons dans input.txt. Mettons donc le code ci-dessus dans le fichier
CopyFile.java et procédons comme suit -

$javac CopyFile.java
$java CopyFile

Normes de flux
Tous les langages de programmation prennent en charge les standards E/S dans
lesquels le programme de l'utilisateur peut saisir les entrées d'un clavier et ensuite
produire une sortie sur l'écran de l'ordinateur. Si vous connaissez les langages de
programmation C ou C++, vous devez connaître trois périphériques standards
STDIN, STDOUT et STDERR. De même, Java fournit les trois flux standards suivants
-

Entrée standard - Ceci est utilisé pour transmettre les données au


programme de l'utilisateur et généralement un clavier est utilisé comme flux
d'entrée standard et représenté par System.in .

Standard Output - Ceci est utilisé pour sortir les données produites par le
programme de l'utilisateur et généralement un écran d'ordinateur est utilisé
pour le flux de sortie standard et représenté par System.out .
Standard Error - Ceci est utilisé pour générer les données d'erreur produites
par le programme de l'utilisateur et généralement un écran d'ordinateur est
utilisé pour le flux d'erreurs standard et représenté par System.err .

Voici un programme simple, qui crée InputStreamReader pour lire le flux d'entrée
standard jusqu'à ce que l'utilisateur tape un "q" -

Exemple

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 4/10
26/12/2023 07:03 Java - Fichiers et E/S

import java.io.InputStreamReader;

public class ReadConsole {

public static void main(String args[]) throws IOException {


InputStreamReader cin = null;

try {
cin = new InputStreamReader(System.in);
System.out.println("Enter characters, 'q' to quit.");
char c;
do {
c = (char) cin.read();
System.out.print(c);
} while(c != 'q');
}finally {
if (cin != null) {
cin.close();
}
}
}
}

Conservons le code ci-dessus dans le fichier ReadConsole.java et essayez de le


compilateur et de l'exécuter comme indiqué dans le programme suivant. Ce
programme continue de lire et d'afficher le même caractère jusqu'à ce que nous
appuyions sur 'q' -

$javac ReadConsole.java
$java ReadConsole
Enter characters, 'q' to quit.
1
1
e
e
q
q

Lecture et écriture de fichiers

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 5/10
26/12/2023 07:03 Java - Fichiers et E/S

Comme décrit précédemment, un flux peut être défini comme une séquence de
données. Le InputStream est utilisé pour lire les données d'une source et le
OutputStream est utilisé pour écrire des données vers une destination.

Voici une hiérarchie de classes pour gérer les flux d'entrée et de sortie.

Les deux flux importants sont FileInputStream et FileOutputStream , qui seront


abordés dans ce didacticiel.

FichierInputStream

Ce flux est utilisé pour lire les données des fichiers. Les objets peuvent être créés à
l'aide du mot-clé nouveau et plusieurs types de constructeurs sont disponibles.

Le constructeur suivant prend un nom de fichier sous forme de chaîne pour créer un
objet de flux d'entrée pour lire le fichier -

InputStream f = new FileInputStream("C:/java/hello");

Le constructeur suivant prend un objet fichier pour créer un objet de flux d'entrée
pour lire le fichier. Nous créons d'abord un fichier objet en utilisant la méthode File()
comme suit -

File f = new File("C:/java/hello");


InputStream f = new FileInputStream(f);

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 6/10
26/12/2023 07:03 Java - Fichiers et E/S

Une fois que vous avez l'objet InputStream en main, vous trouverez une liste de
méthodes d'assistance qui peuvent être utilisées pour lire le flux ou pour effectuer
d'autres opérations sur le flux.

FichierOutputStream
FileOutputStream est utilisé pour créer un fichier et y écrire des données. Le flux
créerait un fichier, s'il n'existe pas déjà, avant de l'ouvrir pour la sortie.

Voici deux constructeurs qui peuvent être utilisés pour créer un objet
FileOutputStream.

Le constructeur suivant prend un nom de fichier sous forme de chaîne pour créer un
objet de flux d'entrée pour écrire le fichier -

OutputStream f = new FileOutputStream("C:/java/hello")

Le constructeur suivant prend un objet fichier pour créer un objet de flux de sortie
pour écrire le fichier. Tout d'abord, nous créons un fichier objet en utilisant la
méthode File() comme suit -

File f = new File("C:/java/hello");


OutputStream f = new FileOutputStream(f);

Une fois que vous avez l'objet OutputStream en main, vous trouverez une liste de
méthodes d'assistance qui peuvent être utilisées pour écrire dans le flux ou pour
effectuer d'autres opérations sur le flux.

Exemple

Voici l'exemple pour démontrer InputStream et OutputStream -

import java.io.OutputStream;

public class fileStreamTest {

public static void main(String args[]) {

try {
byte bWrite [] = {11,21,3,40,5};
OutputStream os = new FileOutputStream("test.txt");
for(int x = 0; x < bWrite.length ; x++) {
os.write( bWrite[x] ); // writes the bytes
https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 7/10
26/12/2023 07:03 Java - Fichiers et E/S

}
os.close();

InputStream is = new FileInputStream("test.txt");


int size = is.available();

for(int i = 0; i < size; i++) {


System.out.print((char)is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.print("Exception");
}
}
}

Le code ci-dessus créerait le fichier test.txt et écrirait les nombres donnés au format
binaire. Il en serait de même pour la sortie sur l'écran de la sortie standard.

Répertoires en Java
Un répertoire est un fichier qui peut contenir une liste d'autres fichiers et
répertoires. Vous utilisez l'objet File pour créer des répertoires, pour répertorier les
fichiers disponibles dans un répertoire. Pour plus de détails, consultez une liste de
toutes les méthodes que vous pouvez appeler sur l'objet File et celles liées aux
répertoires.

Création de répertoires

Il existe deux méthodes utilitaires de fichiers utiles , qui peuvent être utilisées pour
créer des répertoires -

La méthode mkdir( ) crée un répertoire, renvoyant vrai en cas de succès et


faux en cas d'échec. Un échec indique que le chemin spécifié dans l'objet File
existe déjà ou que le répertoire ne peut pas être créé car le chemin complet
n'existe pas encore.

La méthode mkdirs() crée à la fois un répertoire et tous les parents du


répertoire.

L'exemple suivant crée le répertoire "/tmp/user/java/bin" -

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 8/10
26/12/2023 07:03 Java - Fichiers et E/S

Exemple

import java.io.File;

public class CreateDir {

public static void main(String args[]) {


String dirname = "/tmp/user/java/bin";
File d = new File(dirname);

// Create directory now.


d.mkdirs();
}
}

Compilez et exécutez le code ci-dessus pour créer "/tmp/user/java/bin".

Remarque - Java prend automatiquement en charge les séparateurs de chemin


sous UNIX et Windows conformément aux conventions. Si vous utilisez une barre
oblique (/) sur une version Windows de Java, le chemin sera toujours résolu
correctement.

Répertoires de listes
Vous pouvez utiliser la méthode list () fournie par l'objet File pour répertorier tous
les fichiers et répertoires disponibles dans un répertoire comme suit -

Exemple

import java.io.File;

public class ReadDir {

public static void main(String[] args) {


File file = null;
String[] paths;

try {
// create new file object
file = new File("/tmp");

// array of files and directory

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 9/10
26/12/2023 07:03 Java - Fichiers et E/S

paths = file.list();

// for each name in the path array


for(String path:paths) {
// prints filename and directory name
System.out.println(path);
}
} catch (Exception e) {
// if any error occurs
e.printStackTrace();
}
}
}

Cela reproduit le résultat suivant basé sur les répertoires et fichiers disponibles dans
votre répertoire /tmp -

Sortir

test1.txt
test2.txt
ReadDir.java
ReadDir.class

https://www-tutorialspoint-com.translate.goog/java/java_files_io.htm?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc 10/10

Vous aimerez peut-être aussi