Comment télécharger un fichier à partir d’une URL en Java ?

Dans ce tutoriel, nous verrons plusieurs méthodes que nous pouvons utiliser pour télécharger un fichier.

Nous allons couvrir des exemples allant de l’utilisation de base de Java IO au package NIO, en passant par certaines bibliothèques communes telles que Apache Commons IO.
 
QCM-JavaQCM Java – Programmation Orientée ObjetQCM sur Java avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus

Java IO

Le package Java IO est le package de base pour télécharger un fichier à partir d’une URL. Ici, nous allons utiliser BufferedInputStream et les classes d’URL pour ouvrir et lire un fichier d’une adresse donnée à un fichier de notre système local. La raison pour laquelle nous utilisons la classe BufferedInputStream à la place de InputStream est sa capacité de mise en mémoire qui donne à notre code une amélioration de performances.

La classe java.net.URL en Java est une bibliothèque intégrée qui offre plusieurs méthodes pour accéder aux données et les manipuler sur Internet. Dans ce cas, nous utiliserons la fonction openStream() de la classe URL. La signature de la méthode openStream() est la suivante:

public final InputStream openStream() throws IOException

La fonction openStream() fonctionne sur un objet de la classe URL. La classe URL ouvre une connexion à l’URL donnée et la méthode openStream() renvoie un flux d’entrée utilisé pour lire les données de la connexion.

La deuxième classe que nous allons utiliser est BufferedInputStreamReader et FileOutputStream. Ces classes sont utilisées pour lire à partir d’un fichier et y écrire, respectivement.

try (BufferedInputStream bis = new BufferedInputStream(new URL("http://test.com/myfile.txt").openStream());  
  FileOutputStream fos = new FileOutputStream("/Desktop/myfile.txt")) {
    byte data[] = new byte[1024];
    int byteContent;
    while ((byteContent = bis.read(data, 0, 1024)) != -1) {
        fos.write(data, 0, byteContent);
    }
} catch (IOException e) {
   e.printStackTrace(System.out);
}
Différence entre Héritage et CompositionDifférence entre Héritage et CompositionBien que l’héritage et la composition permettent la réutilisation du code, la principale différence entre la composition et l’héritage réside dans le fait que la…Lire plus
Java NIO

Java NIO est un package alternatif permettant de gérer les opérations réseau et les entrées-sorties en Java. L’avantage du package Java NIO est qu’il ne se bloque pas et qu’il dispose de fonctionnalités de canalisation et de mise en mémoire. Lorsque nous utilisons la bibliothèque Java IO, nous travaillons avec des flux qui lisent les données octet par octet. Cependant, le package Java NIO utilise des canaux et des buffers. Les fonctions de mise en mémoire et de canalisation permettent au système de copier le contenu d’une URL directement dans le fichier souhaité sans avoir à enregistrer les octets dans la mémoire de l’application, ce qui constituerait une étape intermédiaire. La capacité de travailler avec des canaux améliore les performances.

Afin de télécharger le contenu d’une URL, nous allons utiliser les classes ReadableByteChannel et FileChannel.

ReadableByteChannel rbc = Channels.newChannel(new URL("http://test.com/myfile.txt").openStream());

La classe ReadableByteChannel crée un flux pour lire le contenu à partir de l’URL. Le contenu téléchargé sera transféré dans un fichier sur le système local via le canal correspondant

FileOutputStream fos = new FileOutputStream("/Desktop/myfile.txt");  
FileChannel channel = fos.getChannel();

Après avoir défini le canal de fichier, nous utiliserons la méthode transferFrom() pour copier le contenu lu de l’objet « rbc » vers la destination du fichier à l’aide de l’objet « channel ».

channel.transferFrom(rbc, 0, Long.MAX_VALUE);
QCM-JavaQCM Java – JDK JRE JVM et JITQCM sur Java avec des réponses pour la préparation des entretiens d’embauche, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus
Apache Commons IO

La bibliothèque Apache Commons IO propose une liste de classes permettant de gérer les opérations IO. Maintenant, vous vous demandez peut-être pourquoi nous utilisons cela lorsque Java dispose de son propre bibliothèques pour gérer les opérations IO. Cependant, Apache Commons IO résout le problème de la réécriture du code et permet d’éviter d’écrire du code standard.

Pour télécharger un fichier à partir d’une URL donnée avec Apache Commons IO, nous avons besoin de la classe FileUtils. Une seule ligne de code est nécessaire pour télécharger un fichier, qui ressemble à ceci:

FileUtils.copyURLToFile(  
  new URL("http://test.com/myfile.txt"), 
  new File("/Desktop/myfile.txt"), 
  CONNECTION_TIMEOUT, 
  READ_TIMEOUT);

 

Conclusion

Nous avons vu dans ce Tutorial plusieurs façons pour télécharger un fichier à partir d’une URL en Java. L’implémentation la plus courante est celle dans laquelle nous mémorisons les octets lors de l’exécution des opérations de lecture / écriture. Cette implémentation est sûre à utiliser même pour les gros fichiers car nous ne chargeons pas l’ensemble du fichier en mémoire.
 
 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *