1. Filesclasse

Classe de fichiers

Pour travailler avec des fichiers, il existe une classe utilitaire astucieuse — java.nio.file.Files. Il a des méthodes pour chaque occasion. Toutes les méthodes de cette classe sont statiques et fonctionnent sur l'objet Path. Il existe de nombreuses méthodes, nous ne considérerons donc que les plus importantes:

Méthode Description
Path createFile(Path path)
Crée un nouveau fichier dont le chemin estpath
Path createDirectory(Path path)
Crée un nouveau répertoire
Path createDirectories(Path path)
Crée plusieurs répertoires
Path createTempFile(prefix, suffix)
Crée un fichier temporaire
Path createTempDirectory(prefix)
Crée un répertoire temporaire
void delete(Path path)
Supprime un fichier ou un répertoire s'il est vide
Path copy(Path src, Path dest)
Copie un fichier
Path move(Path src, Path dest)
Déplace un fichier
boolean isDirectory(Path path)
Vérifie si le chemin est un répertoire et non un fichier
boolean isRegularFile(Path path)
Vérifie si le chemin est un fichier et non un répertoire
boolean exists(Path path)
Vérifie si un objet existe au chemin donné
long size(Path path)
Renvoie la taille du fichier
byte[] readAllBytes(Path path)
Renvoie tout le contenu d'un fichier sous la forme d'un tableau d'octets
String readString(Path path)
Renvoie tout le contenu d'un fichier sous forme de chaîne
List<String> readAllLines(Path path)
Renvoie tout le contenu d'un fichier sous la forme d'une liste de chaînes
Path write(Path path, byte[])
Écrit un tableau d'octets dans un fichier
Path writeString(Path path, String str)
Écrit une chaîne dans un fichier
DirectoryStream<Path> newDirectoryStream(Path dir)
Renvoie une collection de fichiers (et sous-répertoires) du répertoire donné

2. Création de fichiers et de répertoires

Les fichiers et les répertoires sont très faciles à créer. Convainquons-nous par quelques exemples :

Code Note
Files.createFile(Path.of("c:\\readme.txt"));
Crée un fichier
Files.createDirectory(Path.of("c:\\test"));
Crée un répertoire
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Crée un répertoire et tous les sous-répertoires nécessaires s'ils n'existent pas.

3. Copier, déplacer et supprimer

Copier, déplacer et supprimer des fichiers est tout aussi simple. Ceci s'applique également aux répertoires, mais ils doivent être vides.

Code Note
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Copie un fichier
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Déplace et renomme un fichier
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Supprime un fichier

4. Vérifier le type et l'existence d'un fichier

Lorsque vous avez un chemin fourni par quelqu'un d'autre, vous voulez savoir s'il s'agit d'un fichier ou d'un répertoire. Et en général, un tel fichier/répertoire existe-t-il ou non ?

Il existe également des méthodes spéciales pour cela. Vous pouvez aussi facilement connaître la longueur d'un fichier :

Code Note
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. Travailler avec le contenu des fichiers

Enfin, il existe toute une série de méthodes qui facilitent la lecture ou l'écriture du contenu d'un fichier. Exemple:

Code Description
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

Lit le contenu du fichier sous la forme d'une liste de chaînes.

Afficher les chaînes


6. Obtenir le contenu d'un répertoire

La méthode la plus intéressante demeure. Il est utilisé pour obtenir des fichiers et des sous-répertoires dans un répertoire donné.

Nous parlons de la newDirectoryStream()méthode, qui renvoie un DirectoryStream<Path>objet spécial. Il a un itérateur (!) que vous pouvez utiliser pour obtenir tous les fichiers et sous-répertoires d'un répertoire donné.

C'est plus facile qu'il n'y paraît.

Code Description
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


Obtenir un objet avec une liste de fichiers
Boucle sur la liste de fichiers

L' DirectoryStream<Path>objet a deux propriétés. Tout d'abord, il a un itérateur qui renvoie les chemins de fichiers, et nous pouvons utiliser cet objet dans une for-eachboucle.

Et deuxièmement, cet objet est un flux de données, il doit donc être explicitement fermé à l'aide de la close()méthode ou déclaré à l'intérieur d'un try-with-resourcesbloc.



7. Files.newInputStreamméthode

Depuis Java 5, les classes FileInputStreamet FileOutputStreamsont obsolètes. L'un de leurs inconvénients était que lorsque des objets de ces classes sont créés, les fichiers sont immédiatement créés sur le disque. Et toutes les exceptions liées à la création de fichiers pourraient potentiellement être levées.

Plus tard, cela a été reconnu comme n'étant pas la meilleure décision. En conséquence, il est recommandé d'utiliser les méthodes de la java.nio.Filesclasse utilitaire pour créer des objets fichier.

Voici une comparaison entre l'ancienne approche et la nouvelle approche de création de fichiers :

Avant
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
Après
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

Et il y a un remplacement similaire pour FileOutputStream:

Avant
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
Après
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );