1. Pathclasse

Si vous voulez écrire un programme qui fait quelque chose avec des fichiers sur disque, c'est assez facile. Java a beaucoup de classes qui vous aident à travailler à la fois avec les fichiers eux-mêmes et avec leur contenu.

Les premières versions de Java utilisaient des classes comme Fileet FileInputStreampour travailler avec des fichiers. Cependant, la Fileclasse est désormais obsolète et son utilisation n'est pas recommandée. Bien sûr, vous pouvez toujours le rencontrer dans le code, les paramètres de méthode ou les constructeurs de classe.

Dès le début, nous allons commencer à apprendre à travailler avec des fichiers à l'aide de la Pathclasse. Pathest la classe qui a remplacé File. C'est plus sûr et plus efficace.

Pathclasse

Techniquement, Pathce n'est pas une classe — c'est une interface. Ceci est fait pour permettre l'écriture d'un descendant de la Pathclasse pour chaque système d'exploitation (et système de fichiers).

Windows a une norme pour écrire les chemins de fichiers et Linux en a une autre. Bien sûr, il existe de nombreux autres systèmes d'exploitation dans le monde, et chacun a sa propre norme.

C'est pourquoi l' Pathinterface est utilisée partout dans les méthodes qui travaillent avec des fichiers, bien qu'en réalité le travail passe par ses classes descendantes : WindowsPath, UnixPath, ...

Création d'un Pathobjet

Pour créer un Pathobjet (qui sera en fait un objet de la WindowsPathclasse descendante), vous devez utiliser une instruction comme celle-ci :

Path name = Path.of(path);

nameest le nom d'une Pathvariable, et pathest le chemin d'accès au fichier (ou au répertoire) incluant le nom du fichier (ou du répertoire). Et ofest une méthode statique de la Pathclasse.

La of()méthode est utilisée pour créer WindowsPathdes objets si le programme s'exécute sous Windows. Si le programme s'exécute sous Linux, des UnixPathobjets sont créés. Vous ne pouvez pas créer un Pathobjet à l'aide d'un code tel que .new Path()

Exemples:

Code Note
Path file = Path.of("c:\\projects\\note.txt");
Chemin d'accès au fichier
Path directory = Path.of("c:\\projects\\");
Chemin d'accès au répertoire

Le fichier (ou le répertoire) n'a pas besoin d'exister pour qu'un Pathobjet valide existe. Peut-être que vous voulez juste créer un fichier... Un Pathobjet est comme un gonflé String: il n'est pas lié à un fichier spécifique sur le disque — il stocke juste un certain chemin sur le disque. C'est ça.


2. Méthodes du Pathtype

L' Pathinterface a quelques méthodes intéressantes. Les plus intéressantes sont présentées dans le tableau ci-dessous.

Méthode Description
Path getParent()
Renvoie le répertoire parent
Path getFileName()
Renvoie le nom du fichier sans le répertoire
Path getRoot()
Renvoie le répertoire racine à partir d'un chemin
boolean isAbsolute()
Vérifie si le chemin actuel est absolu
Path toAbsolutePath()
Convertit le chemin en absolu
Path normalize()
Supprime les caractères génériques dans un nom de répertoire.
Path resolve(Path other)
Construit un nouveau chemin absolu à partir de chemins absolus et relatifs.
Path relativize(Path other)
Obtient un chemin relatif à partir de deux chemins absolus.
boolean startsWith(Path other)
Vérifie si le chemin actuel commence par un chemin donné
boolean endsWith(Path other)
Vérifie si le chemin actuel se termine par un chemin donné
int getNameCount()
Divise le chemin en parties en utilisant /comme délimiteur.
Renvoie le nombre de pièces.
Path getName(int index)
Divise le chemin en parties en utilisant /comme délimiteur.
Renvoie une partie par son index.
Path subpath(int beginIndex, int endIndex)
Divise le chemin en parties en utilisant /comme délimiteur.
Renvoie le sous-chemin correspondant à l'intervalle donné.
File toFile()
Convertit un Pathobjet en Fileobjet obsolète
URI toUri()
Convertit un Pathobjet en URIobjet

Voici une brève description des méthodes existantes.


3. Diviser un chemin en parties

La getParent()méthode renvoie le chemin qui pointe vers le répertoire parent du chemin actuel. Que ce chemin soit un répertoire ou un fichier :

Code Valeur
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

La getFileName()méthode renvoie un seul nom de fichier (ou de répertoire) — celui qui vient après le dernier délimiteur :

Code Valeur
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

La getRoot()méthode renvoie le chemin d'accès au répertoire racine :

Code Valeur
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Chemins absolus et relatifs

Il existe deux types de chemins : absolu et relatif. Un chemin absolu commence à partir du répertoire racine. Pour Windows, cela pourrait être le c:\dossier ; pour Linux — le /répertoire

Un chemin relatif est significatif par rapport à un répertoire. Autrement dit, c'est comme la fin de la route, mais sans le début. Vous pouvez transformer un chemin relatif en chemin absolu et vice versa

boolean isAbsolute()méthode

La méthode vérifie si le chemin actuel est absolu

Code Valeur
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

Path toAbsolutePath()méthode

Convertit le chemin en absolu. Si nécessaire, y ajoute le répertoire de travail courant :

Code Valeur
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

Path normalize()méthode

Dans le chemin, au lieu d'un nom de répertoire, vous pouvez écrire "..", ce qui signifie revenir en arrière d'un répertoire . La normalisation élimine ces choses. Exemples:

Code Valeur
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

Path relativize(Path other)méthode

La relativize()méthode permet de construire les « différences entre chemins » : un chemin par rapport à un autre

Code Valeur
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
Exception d'argument illégal:
les deux chemins ont une "racine" différente (disques différents)

Path resolve(Path other)méthode

La resolve()méthode fait le contraire de relativize(): elle construit un nouveau chemin absolu à partir d'un chemin absolu et d'un chemin relatif.

Code Valeur
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

toFile()méthode

La méthode renvoie un Fileobjet obsolète qui stocke le même chemin de fichier que l' Pathobjet.

toURI()méthode

La méthode convertit le chemin en un URI standard et renvoie un objet contenant le chemin d'accès au fichier :

Chemin d'accès au fichier URI vers le fichier
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt