Classe Files de Java NIO
java.nio.file.Filesest une classe utilitaire dans le package Java NIO (New I/O), située dans lejava.nio.filepaquet.
java.nio.file.FilesElle fournit une série de méthodes statiques pour manipuler des fichiers et des répertoires dans le système de fichiers, ce qui simplifie grandement les opérations d'E/S de fichiers.
Fonctionnalités principales
- Méthodes statiques: Toutes les méthodes sont statiques, pas besoin de créer une instance
- Fonctionnalités riches: Fournit diverses fonctions telles que la lecture/écriture de fichiers, les opérations sur les attributs, le parcours de répertoires, etc.
- Gestion des exceptions: Utilise uniformément
IOExceptionpour gérer les exceptions d'opération de fichier - Fonctionne avec Path: Principalement utilisé avec le
java.nio.file.Pathinterface
Classification des méthodes courantes
Remarque:De nombreuses méthodes lèvent IOException, donc une gestion des exceptions est nécessaire lors de leur utilisation
Voici les méthodes courantes de la classe java.nio.file.Files:
1. Opérations sur les fichiers
Lecture/Écriture de fichiers
Exemple
// Lire toutes les lignes d'un fichier
List<String> lines = Files.readAllLines(path);
// Écrire dans un fichier
Files.write(path, content.getBytes());
// Écriture en ajout
Files.write(path, content.getBytes(), StandardOpenOption.APPEND);
List<String> lines = Files.readAllLines(path);
// Écrire dans un fichier
Files.write(path, content.getBytes());
// Écriture en ajout
Files.write(path, content.getBytes(), StandardOpenOption.APPEND);
Copie/Déplacement/Suppression de fichiers
Exemple
// Copier un fichier
Files.copy(sourcePath, targetPath);
// Déplacer/renommer un fichier
Files.move(sourcePath, targetPath);
// Supprimer un fichier
Files.delete(path);
Files.copy(sourcePath, targetPath);
// Déplacer/renommer un fichier
Files.move(sourcePath, targetPath);
// Supprimer un fichier
Files.delete(path);
2. Opérations sur les répertoires
Création de répertoires
Exemple
// Créer un répertoire à un seul niveau
Files.createDirectory(path);
// Créer un répertoire à plusieurs niveaux
Files.createDirectories(path);
Files.createDirectory(path);
// Créer un répertoire à plusieurs niveaux
Files.createDirectories(path);
Parcours de répertoire
Exemple
// Parcourir un répertoire
try (Stream<Path> paths = Files.list(directoryPath)) {
paths.forEach(System.out::println);
}
// Parcourir récursivement un répertoire
try (Stream<Path> paths = Files.walk(directoryPath)) {
paths.forEach(System.out::println);
}
try (Stream<Path> paths = Files.list(directoryPath)) {
paths.forEach(System.out::println);
}
// Parcourir récursivement un répertoire
try (Stream<Path> paths = Files.walk(directoryPath)) {
paths.forEach(System.out::println);
}
3. Opérations sur les attributs de fichier
Obtention des attributs de fichier
Exemple
// Vérifier si un fichier existe
boolean exists = Files.exists(path);
// Obtenir la taille du fichier
long size = Files.size(path);
// Obtenir l'heure de dernière modification du fichier
FileTime lastModifiedTime = Files.getLastModifiedTime(path);
boolean exists = Files.exists(path);
// Obtenir la taille du fichier
long size = Files.size(path);
// Obtenir l'heure de dernière modification du fichier
FileTime lastModifiedTime = Files.getLastModifiedTime(path);
Définition des attributs de fichier
Exemple
// Définir l'heure de dernière modification du fichier
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));
// Définir les permissions de fichier
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
Files.setPosixFilePermissions(path, perms);
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));
// Définir les permissions de fichier
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
Files.setPosixFilePermissions(path, perms);
Fonctionnalités avancées
1. Recherche de fichiers
Exemple
// Rechercher des fichiers avec une extension spécifique
try (Stream<Path> paths = Files.find(
directoryPath,
Integer.MAX_VALUE,
(path, attrs) -> path.toString().endsWith(".txt"))) {
paths.forEach(System.out::println);
}
try (Stream<Path> paths = Files.find(
directoryPath,
Integer.MAX_VALUE,
(path, attrs) -> path.toString().endsWith(".txt"))) {
paths.forEach(System.out::println);
}
2. Opérations sur les fichiers temporaires
Exemple
// Créer un fichier temporaire
Path tempFile = Files.createTempFile("prefix", ".suffix");
// Créer un répertoire temporaire
Path tempDir = Files.createTempDirectory("tempDir");
Path tempFile = Files.createTempFile("prefix", ".suffix");
// Créer un répertoire temporaire
Path tempDir = Files.createTempDirectory("tempDir");
3. Vues des attributs de fichier
Exemple
// Obtenir le propriétaire du fichier
UserPrincipal owner = Files.getOwner(path);
// Obtenir les informations de stockage du fichier
FileStore store = Files.getFileStore(path);
UserPrincipal owner = Files.getOwner(path);
// Obtenir les informations de stockage du fichier
FileStore store = Files.getFileStore(path);
Bonnes pratiques
1. Gestion des exceptions
Exemple
try {
Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.err.println("Échec de l'opération sur le fichier : " + e.getMessage());
}
Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.err.println("Échec de l'opération sur le fichier : " + e.getMessage());
}
2. Nettoyage des ressources
Exemple
try (Stream<String> lines = Files.lines(path)) {
lines.forEach(System.out::println);
} // Fermer automatiquement le flux
lines.forEach(System.out::println);
} // Fermer automatiquement le flux
3. Considérations sur les performances
- Pour les fichiers volumineux, utilisez des flux tamponnés (
Files.newBufferedReader/Files.newBufferedWriter) - Pour les opérations par lots, envisagez d'utiliser
Files.walkau lieu d'appels récursifs - Les attributs fréquemment accédés peuvent être mis en cache
Comparaison avec les E/S traditionnelles
| Fonctionnalité | Classe Files (NIO) | E/S traditionnelles (java.io) |
|---|---|---|
| Type de méthode | Méthodes statiques | Méthodes d'instance |
| Représentation du chemin | Utilise l'interface Path | Utilise la classe File |
| Gestion des exceptions | Utilise IOException de manière uniforme | Plusieurs types d'exceptions |
| Richesse des fonctionnalités | Fonctionnalités plus riches | Fonctionnalité de base |
| Gestion des liens symboliques | Prise en charge native | Prise en charge limitée |
| Opérations sur les attributs de fichier | Plus complet | Limité |
Grâce à laFilesclasse, Java fournit une API de manipulation de fichiers plus moderne et plus puissante. Il est recommandé de l'utiliser dans les nouveaux projets pour remplacer la traditionnellejava.io.Fileclass.