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émentIOExceptionpour gérer les exceptions d'opération de fichier
  • Fonctionne avec Path: Principalement utilisé avec lejava.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:

Méthode Description
Opérations sur les fichiers
static Path copy(Path source, Path target, CopyOption... options) Copie un fichier du chemin source vers le chemin cible
static Path move(Path source, Path target, CopyOption... options) Déplace ou renomme un fichier
static void delete(Path path) Supprime un fichier
static boolean deleteIfExists(Path path) Supprime un fichier s'il existe
Attributs de fichier
static boolean exists(Path path, LinkOption... options) Vérifie si un fichier existe
static boolean isDirectory(Path path, LinkOption... options) Vérifie si le chemin est un répertoire
static boolean isRegularFile(Path path, LinkOption... options) Vérifie si le chemin est un fichier régulier
static boolean isReadable(Path path) Vérifie si un fichier est lisible
static boolean isWritable(Path path) Vérifie si un fichier est accessible en écriture
static boolean isExecutable(Path path) Vérifie si un fichier est exécutable
static long size(Path path) Renvoie la taille du fichier (octets)
static FileTime getLastModifiedTime(Path path, LinkOption... options) Obtient la date de dernière modification du fichier
Opérations sur le contenu des fichiers
static byte[] readAllBytes(Path path) Lit tous les octets d'un fichier
static List<String> readAllLines(Path path) Lit toutes les lignes d'un fichier
static List<String> readAllLines(Path path, Charset cs) Lit toutes les lignes d'un fichier en utilisant un jeu de caractères spécifié
static Stream<String> lines(Path path) Renvoie un flux de lignes dans le fichier
static Stream<String> lines(Path path, Charset cs) Renvoie un flux de lignes dans le fichier en utilisant un jeu de caractères spécifié
static Path write(Path path, byte[] bytes, OpenOption... options) Écrit des octets dans un fichier
static Path write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options) Écrit des lignes de texte dans un fichier
Opérations sur les répertoires
static Stream<Path> list(Path dir) Liste les entrées d'un répertoire
static DirectoryStream<Path> newDirectoryStream(Path dir) Ouvre un flux de répertoire
static Path createDirectory(Path dir, FileAttribute<?>... attrs) Crée un répertoire
static Path createDirectories(Path dir, FileAttribute<?>... attrs) Crée un répertoire (y compris tous les répertoires parents inexistants)
Fichiers/Répertoires temporaires
static Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs) Crée un fichier temporaire
static Path createTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs) Crée un répertoire temporaire
Autres
static Path createFile(Path path, FileAttribute<?>... attrs) Crée un nouveau fichier
static SeekableByteChannel newByteChannel(Path path, OpenOption... options) Ouvre ou crée un fichier, renvoyant un canal d'octets adressable
static InputStream newInputStream(Path path, OpenOption... options) Ouvre un flux d'entrée de fichier
static OutputStream newOutputStream(Path path, OpenOption... options) Ouvre un flux de sortie de fichier
static BufferedReader newBufferedReader(Path path) Ouvre un lecteur tamponné
static BufferedWriter newBufferedWriter(Path path, OpenOption... options) Ouvre un écrivain tamponné
static String probeContentType(Path path) Détermine le type de contenu d'un fichier

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);

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);

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);

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);
}

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);

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);

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);
}

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");

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);

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());
}

2. Nettoyage des ressources

Exemple

try (Stream<String> lines = Files.lines(path)) {
    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'utiliserFiles.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.

Autres extensions