Java >> Tutoriel Java >  >> Java

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

Vous cherchez à créer votre propre application capable de télécharger n'importe quel fichier en un seul clic ? Si vous souhaitez une telle fonctionnalité dans votre application Java, vous êtes au bon endroit. De nombreux développeurs ont besoin de telles fonctionnalités de téléchargement de fichiers dans leur application Java. Dans cet article, vous apprendrez à télécharger un fichier à l'aide d'une URL en Java.

Qu'est-ce que le téléchargement d'un fichier à l'aide d'une URL ?

Le téléchargement d'un fichier via un code Java à l'aide d'une URL permet à l'application Java de télécharger un fichier directement dans un système local à partir d'un référentiel distant ou de tout autre stockage local. Ce processus lit un fichier à partir de l'URL et l'écrit dans un fichier local. Java propose trois manières différentes de télécharger un fichier à l'aide d'une URL.

1 : Structure Java simple :

Si nous utilisons Java sans utiliser de bibliothèque externe, il prend le fichier en entrée et lit ces données octet par octet. Maintenant, si nous prenons les données octet par octet d'un flux d'entrée et écrivons les octets dans un flux de sortie de fichier, nous pouvons réaliser le téléchargement à l'aide d'une URL.

Programme :

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.net.URL;
class Main{
    public static void URLDnldFile(URL urlink, String fileName) throws IOException{
        try (InputStream inp = urlink.openStream();
                BufferedInputStream bis = new BufferedInputStream(inp);
                FileOutputStream fops = new FileOutputStream(fileName)){
 
            byte[] d = new byte[1024];
            int i;
            while ((i = bis.read(d, 0, 1024)) != -1){
                fops.write(d, 0, i);
            }}}
    public static void main(String[] args) throws Exception{
        System.out.println("Call this method when you want your application to have this.");
        //Call the URLDnldFile() method
    }}

Explication :

Ici, nous devons importer BufferInputStream, FileInputStream, InputStream, IOException et java.net.URL. Maintenant, créez une classe Main avec une méthode URLDnldFile() qui lève une exception IO. La fonction utilise deux paramètres, un lien URL et l'autre nom de fichier. Créez une variable ‘d’ de type byte. Le flux d'octets sera lu dans cette méthode en utilisant la boucle while.

2 :Utilisation du package Java.IO :

java.io est le package Java traditionnel qui contient différentes classes. Il contient des classes intégrées utilisées explicitement pour lire et écrire dans un flux.

Programme :

import java.net.URL;
import java.net.URLConnection;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
public class Main{
   public static void main(String[] args){
      OutputStream ops = null;
      InputStream ins = null;
      String fileLink = "http://200.156.21.23:8080/karlos/project1.txt";
      String oppath = "G:\\Downloads\\urlfile.txt";
      try {
    	URL url = new URL(fileLink);
        URLConnection connection = url.openConnection();
        ins = connection.getInputStream();
        ops = new FileOutputStream(oppath);
	final byte[] bt = new byte[1024];
	int len;
	while ((len = ins.read(bt)) != -1){
	   ops.write(bt, 0, len);}
      }catch (IOException ex){
	   ex.printStackTrace();
      }finally{
           // close streams
           System.out.println("URL's File downloaded....");   
      }}}

Explication :

Ici, nous devons importer les URLConnection, FileOutputStream, IOException, InputStream et OutputStream. Dans main(), créez un objet OutputStream et InputStream et deux variables de chaîne pour contenir le lien URL et l'emplacement du fichier. Dans le bloc try, définissez l'URL et l'URLConnection à l'aide de getInputStream(). Le bloc catch suivant gérera toute exception d'entrée-sortie et exécutera printStackTrace(). Le bloc finally (qui s'exécute automatiquement en tant que partie obligatoire du programme) affichera le message « Fichier d'URL téléchargé ».

3 :Utilisation de NIO :

Java NIO (en abrégé New IO) est une API Java d'entrée-sortie alternative qui se présente également sous la forme d'un package Java. Le NIO agit comme une alternative à l'API standard Java IO et Java Networking. Lors de l'utilisation de la bibliothèque Java IO, les flux lisent les données octet par octet. Mais dans le package Java NIO, les données sont lues sous forme de canaux et de tampons.

Programme

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.io.File;

public class Main{
   public static void main(String[] args){
     try{
        String fileLink = "http://200.156.21.23:8080/karlos/project1.txt";
        String oppath = "G:\\Downloads\\urlfile.txt";
	URL link = new URL(fileLink);
        InputStream ins = link.openStream();
        ReadableByteChannel chh = Channels.newChannel(link.openStream());
	FileOutputStream fos = new FileOutputStream(new File(oppath));
	fos.getChannel().transferFrom(chh, 0, Long.MAX_VALUE);
	fos.close();
	chh.close();
     } catch(IOException ex){
          ex.printStackTrace();
     }}}

Explication :

Ici, nous devons importer l'URL, les canaux (qui font partie du package NIO), FileOutputStream, IOException, InputStream OutputStream et java.io.File. Maintenant, dans la classe Main, nous avons créé le main(). Dans main() et dans le bloc try, nous avons créé deux objets String nommés fileLink et oppath où nous avons défini le lien URL et l'emplacement du fichier. Ensuite, nous avons créé un flux d'entrée pour le fichier que nous voulons télécharger. Ensuite, nous devons produire un nouveau canal chargé de lire les données de ce flux d'entrée. Ensuite, nous devons créer un flux de sortie qui écrira le contenu du fichier après l'avoir mis à partir de l'objet channel. Maintenant, nous devons récupérer le canal à partir de ce flux de sortie et définir son contenu à partir du canal. Le bloc catch suivant gérera toute exception d'entrée-sortie et exécutera printStackTrace().

4 :Utilisation d'E/S Apache Commons :

Apache Commons IO est un package utilitaire de Java qui a une classe org.apache.commons.io.FileUtils. Il comprend une méthode copyURLToFile qui peut aider à programmer les opérations IO. Cette méthode prend 2 arguments - Le premier est l'objet java.net.URL qui pointe vers le fichier source tandis que le second est l'objet java.io.File pointant vers le chemin du fichier de sortie. Notez que les deux chemins doivent se composer de nom de fichier à la fin. Le chemin de sortie doit être l'emplacement du fichier sur votre système local à partir duquel le fichier sera téléchargé.

Programme :

import org.apache.commons.io.FileUtils;
 
public class Main {
   public static void main(String[] args) {
      String fileLink = "http://200.156.21.23:8080/karlos/proj.zip";
      String oppath = "G:\\downloads\\proj.zip";
      FileUtils.copyURLToFile(new URL(fileLink), new File(oppath));
   }
}

You can further append Apache Commons IO dependency in your project.
<!– Maven –>
<dependency>
<groupId> org.apache.commons </groupId>
<artifactId> commons-io </artifactId>
<version> 1.3.2 </version>
</dependency>

// Gradle
compile group: ‘org.apache.commons’, name: ‘commons-io’, version: ‘1.3.2’

Explication :

Tout d'abord, nous devons importer apache.commons.io.FileUtils. Dans la classe Main, nous devons créer le main() dans lequel nous devons créer deux variables String pour contenir le lien URL et l'emplacement du fichier. Maintenant, utilisez la méthode FileUtils.copyURLToFile() pour que le programme télécharge un fichier (à partir de l'emplacement spécifié) en utilisant l'URL (donnée). Cette méthode prend deux paramètres fileLink et oppath, que nous avons créés précédemment.

Conclusion :

Parmi ces quatre techniques, Apache Commons IO est la plus simple. Mais cela augmente la taille du programme et réduit la vitesse en raison de l'inclusion d'une bibliothèque externe. La méthode 2, qui utilise le package IO préexistant, est l'approche la plus rapide, mais pas la plus récente. New Input-Output (NIO package), comme son nom l'indique, est le dernier package IO qui est une alternative au package IO, peut également vous être utile si vous souhaitez effectuer des opérations d'E/S différentes et les plus récentes dans votre programme.


Balise Java