Téléchargement depuis URL en Java

Résolu
bksrbv Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
Le protocole est http et on ne me demande pas de m'identifier.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
Sauf que le fichier est sur mon serveur :/
0
bksrbv Messages postés 41 Date d'inscription   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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