web-dev-qa-db-fra.com

Comment télécharger un PDF à partir d'une URL donnée en Java?

Je veux créer une application Java qui, lorsqu'elle est exécutée, télécharge un fichier à partir d'une URL. Y a-t-il une fonction que je peux utiliser pour ce faire?

Ce morceau de code ne fonctionnait que pour un .txt fichier:

URL url= new URL("http://cgi.di.uoa.gr/~std10108/a.txt");
BufferedReader in = new BufferedReader(
new InputStreamReader(url.openStream()));
PrintWriter writer = new PrintWriter("file.txt", "UTF-8");

String inputLine;
while ((inputLine = in.readLine()) != null){
   writer.write(inputLine+ System.getProperty( "line.separator" ));               
   System.out.println(inputLine);
}
writer.close();
in.close();
14
JmRag

N'utilisez pas de lecteurs et d'écrivains ici car ils sont conçus pour gérer des fichiers de texte brut qui PDF ne l'est pas (car il contient également de nombreuses autres informations comme des informations sur la police et même des images). utilisez Streams pour copier tous octets bruts .

Ouvrez donc la connexion en utilisant la classe URL. Il vous suffit ensuite de lire son InputStream et d'écrire des octets bruts dans votre fichier.

(c'est un exemple simplifié, vous devez toujours gérer les exceptions et assurer la fermeture des flux aux bons endroits)

System.out.println("opening connection");
URL url = new URL("https://upload.wikimedia.org/wikipedia/en/8/87/Example.JPG");
InputStream in = url.openStream();
FileOutputStream fos = new FileOutputStream(new File("yourFile.jpg"));

System.out.println("reading from resource and writing to file...");
int length = -1;
byte[] buffer = new byte[1024];// buffer for portion of data from connection
while ((length = in.read(buffer)) > -1) {
    fos.write(buffer, 0, length);
}
fos.close();
in.close();
System.out.println("File downloaded");

Depuis Java 7, nous pouvons également utiliser Files.copy et le try-with-resources pour fermer automatiquement le InputStream (le flux ne doit pas être fermé manuellement dans ce cas):

URL url = new URL("https://upload.wikimedia.org/wikipedia/en/8/87/Example.JPG");
try (InputStream in = url.openStream()) {
   Files.copy(in, Paths.get("someFile.jpg"), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
   // handle exception
}
29
Pshemo