Téléchargement depuis URL en Java

Résolu/Fermé
bksrbv Messages postés 41 Date d'inscription lundi 3 avril 2017 Statut Membre Dernière intervention 19 juillet 2017 - 18 juil. 2017 à 20:07
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 19 juil. 2017 à 07:28
Bonjour,

J'ai un problème lors des téléchargements à partir d'un URL, mon fichier téléchargé reste à 0ko donc inutilisable. Voici le code (de KX ) :

public static void download(URL src, File dest) throws IOException {
try (PrintWriter out = new PrintWriter(dest);
Scanner in = new Scanner(src.openStream())) {
while (in.hasNextLine())
out.println(in.nextLine());
}
}


puis lorsque je lance :
download(new URL("[URL du téléchargement]"), new File("[destination fichier]"));


Merci !
:D
A voir également:

3 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 juil. 2017 à 20:18
Bonjour,

1) Est-ce que le programme se termine ou il reste bloqué ?
2) Il y a une exception ? Laquelle ?
3) Quel est le protocole utilisé dans ton URL ?
4) Si tu te connectes en manuel est-ce que l'on te demande de t'identifier ?
0
bksrbv Messages postés 41 Date d'inscription lundi 3 avril 2017 Statut Membre Dernière intervention 19 juillet 2017
18 juil. 2017 à 20:56
Ce que j'ai fais est un peu particulier, j'ai crée un projet java ou je test juste (puis je met le code dans mon autre projet) voici ma classe:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Scanner;


public class Test {

public static void main(String[] args) {
try {
download(new URL("http://exemple.com/exemple/download/exemple.exe"), new File("C:\\Users\\Bureau2\\AppData\\Roaming\\exemple.exe"));
} catch (Exception e) {}
}

public static void download(URL src, File dest) throws IOException {
try (PrintWriter out = new PrintWriter(dest);
Scanner in = new Scanner(src.openStream())) {
while (in.hasNextLine())
out.println(in.nextLine());
}
}

}
0
bksrbv Messages postés 41 Date d'inscription lundi 3 avril 2017 Statut Membre Dernière intervention 19 juillet 2017
18 juil. 2017 à 20:57
Le protocole est http et on ne me demande pas de m'identifier.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 juil. 2017 à 21:06
Le problème c'est que tu as fait
catch (Exception e)  {}
donc en cas d'erreur elle est complètement cachée et impossible de savoir quel est le problème.

Fait plutôt :

public static void main(String[] args) throws Exception  {
	download(new URL(...), new File(...));
}
0
bksrbv Messages postés 41 Date d'inscription lundi 3 avril 2017 Statut Membre Dernière intervention 19 juillet 2017
18 juil. 2017 à 21:09
Voila les erreurs :

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://exemple.fr/capt/download/exemple.exe
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at Test.download(Test.java:21)
at Test.main(Test.java:15)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 juil. 2017 à 21:16
Erreur 403, c'est accès refusé, tu n'as pas le droit d'accéder à ce fichier.
https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP
0
bksrbv Messages postés 41 Date d'inscription lundi 3 avril 2017 Statut Membre Dernière intervention 19 juillet 2017
18 juil. 2017 à 21:16
Sauf que le fichier est sur mon serveur :/
0
bksrbv Messages postés 41 Date d'inscription lundi 3 avril 2017 Statut Membre Dernière intervention 19 juillet 2017
Modifié le 19 juil. 2017 à 00:25
Bon et bien je suis passé par NIO et tout marche si ça peux aider quelqu'un voici les codes :

private static void download(String urlStr, String file) throws IOException {
URL url = new URL(urlStr);
ReadableByteChannel rbc = Channels.newChannel(url.openStream());
FileOutputStream fos = new FileOutputStream(file);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}


puis pour download :

try  {
download("URL DU TELECHARGEMENT", "LIEU DU DOWNLOAD");
} catch(Exception e) {}


Merci pour vos réponses rapides :)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
19 juil. 2017 à 07:28
Tu étais toujours avec le code avec le Scanner ? En effet cela ne s'applique qu'aux fichiers textes (tu avais piqué ce code dans une discussion qui concernait un fichier HTML). Mais comme tu as un fichier .exe ça casse...

Remarque : on peut simplifier ton code et le sécuriser car tu as des problèmes avec la fermeture des fichiers en cas d'erreur.

public static void download(URL src, Path dest) throws IOException {
    try (InputStream in = src.openStream()) {
        Files.copy(in, dest, StandardCopyOption.REPLACE_EXISTING);
    }
}

download(new URL("http://www.google.fr"), Paths.get("C:/google.html"));
0