« Oh, Rishi ! Salut !

« Salut, Amigo ! Comment va la vie ? »

"Génial. Bilaabo vient de me dire un tas de choses intéressantes sur File et comment travailler avec."

"En l'occurrence, je pense que j'ai quelque chose à ajouter sur ce sujet."

« Vraiment ? Alors je suis tout ouïe.

"D'accord, écoutez. Java évolue constamment. Ses développeurs recherchent constamment de nouvelles façons de faire différentes choses plus efficacement. Dans Java 7, ils ont ajouté une alternative à la classe File."

Fichiers, Chemin - 1

"Alternative?"

"Oui. Ils ont pris la classe File comme base, ont ajouté de nouvelles choses, ont renommé les méthodes, puis l'ont également divisée en deux. Il y a donc maintenant deux nouvelles classes : Path et FilesPath est en fait le nouvel analogue de File et File est une classe utilitaire (analogue aux classes Arrays et Collections). Toutes les méthodes statiques de la classe File y vont. Procéder ainsi est "plus correct" en termes de POO."

"Eh bien, si c'est en termes de POO, alors d'accord. Alors qu'est-ce qui a changé?"

"Tout d'abord, ils ont décidé de ne pas reproduire les méthodes qui renvoyaient  des objets String  et File . Dans la classe Path  , toutes les méthodes renvoient un Path .

"Deuxièmement, ils ont déplacé de nombreuses méthodes utilitaires statiques dans la classe Files ."

"Troisièmement, il est devenu plus pratique de travailler avec des chemins relatifs."

"Voici une liste des méthodes :"

Méthodes de la classe Path Description
boolean isAbsolute() Renvoie true si le chemin est absolu.
Path getRoot() Renvoie la racine du chemin courant, c'est-à-dire le répertoire le plus haut.
Path getFileName() Renvoie le nom du fichier à partir du chemin actuel.
Path getParent() Renvoie le répertoire à partir du chemin actuel.
boolean startsWith(Path other) Vérifie si le chemin actuel commence par le chemin transmis.
boolean endsWith(Path other) Vérifie si le chemin actuel se termine par le chemin passé.
Path normalize() Normalise le chemin actuel. Par exemple, convertit « c:/dir/dir2/../a.txt » en « c:/dir/a.txt »
Path relativize(Path other) Calcule le chemin relatif de deux chemins, c'est-à-dire « la différence entre les chemins »
Path resolve(String other) Résout un chemin absolu à l'aide des chemins actuel et relatif.
URI toUri() Renvoie l'URI si le chemin/fichier actuel.
Path toAbsolutePath() Convertit le chemin en chemin absolu s'il est relatif.
File toFile() Renvoie un objet File qui correspond à l'objet Path actuel.

"Et le chemin actuel - qu'est-ce que c'est?"

"C'est le chemin qui a été passé au constructeur de l'objet Path dont les méthodes sont appelées."

"OK. Alors, quelles méthodes la classe Files a-t-elle ?"

"Êtes-vous pressé d'aller quelque part ? Je vais vous le dire tout de suite. Voici les méthodes les plus importantes :"

Méthodes de la classe Files Description
Path createFile(…) Crée un fichier sur le disque.
Path createDirectory(…) Crée un répertoire.
Path createDirectories(…) Crée un répertoire et tous ses sous-répertoires.
Path createTempFile(…) Crée un fichier temporaire.
Path createTempDirectory(…) Crée un répertoire temporaire.
void delete(Path path) Supprime un fichier.
Path copy(Path source, Path target,…) Copie un fichier.
Path move(Path source, Path target,…) Déplace un fichier.
boolean isSameFile(Path, Path) Compare deux fichiers.
boolean isDirectory(Path) Le chemin est-il un répertoire ?
boolean isRegularFile(Path) Le chemin est-il un fichier ?
long size(Path) Renvoie la taille du fichier.
boolean exists(Path) Existe-t-il un objet portant le même nom ?
boolean notExists(Path) Un objet portant le même nom n'existe-t-il pas ?
long copy(InputStream, OutputStream) Copie les octets de InputStream vers OutputStream.
long copy(Path, OutputStream) Copie tous les octets de Path vers OutputStream.
long copy(InputStream, Path) Copie tous les octets de InputStream vers Path.
byte[] read(InputStream, int initialSize) Lit un tableau d'octets à partir de InputStream.
byte[] readAllBytes(Path path) Lit tous les octets de InputStream.
List<String> readAllLines(Path path,..) Lit le fichier texte et renvoie une liste de chaînes.
Path write(Path path, byte[] bytes,…) Écrit un tableau d'octets dans un fichier.

"Comme c'est intéressant ! Tant de fonctions sympas, et toutes au même endroit."

"Eh bien regardez. Supposons que vous souhaitiez télécharger un fichier sur Internet, puis l'envoyer à quelqu'un. Pour ce faire, il est très pratique de créer un fichier temporaire sur le disque et d'y enregistrer les données lues."

« Est-il difficile de télécharger un fichier sur Internet ? »

"C'est très simple. Regardez cet exemple :"

Code
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"Et c'est tout?"

"Oui, qu'est-ce que tu t'attendais à voir ? Il n'y a que 4 lignes."

" Ligne 1.  Crée un objet URL, auquel l'URL du fichier image est transmise.

" Ligne 2.  Un flux de lecture de fichier (InputStream) est ouvert sur l'objet url.

" Ligne 3.  La createTempFileméthode est utilisée pour créer un fichier temporaire.

" Ligne 4.  La méthode Files.copy copie les données de  inputStream vers tempFile. C'est tout."

"Ingénieux!"

"Génial. Je suis content que ça te plaise. Je pense que tu peux découvrir le reste des méthodes par toi-même. Et je demanderai à Diego de te confier plusieurs tâches à leur sujet."

"Au fait, voici un bon lien sur ce matériel"