Bonjour,
Je cherche a télécharger un fichier distant via HTTP afin de l'écrire dans un fichier en local. J'ai essayé avec le code fournis dans la FAQ ici mais ca ne marche pas.
Donc je fais appel a vous pour m'aider.
Merci d'avance![]()
Bonjour,
Je cherche a télécharger un fichier distant via HTTP afin de l'écrire dans un fichier en local. J'ai essayé avec le code fournis dans la FAQ ici mais ca ne marche pas.
Donc je fais appel a vous pour m'aider.
Merci d'avance![]()
Eh bien les URL font l'affaire dans le cas de téléchargements je pense.![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 /** télécharger depuis ftp://www.developpez.com/ vers local*/ String src, dst; src = "http://ydisanto.ftp-developpez.com/tutoriels/j2se/runtime/runtime.zip"; dst = "file:///c:/ftp/runtime.zip"; if(copier(new File(new URL(src)), new File(new URL(dst)))) throw new Exception("Erreur de copie de " + src + " à " + dst + " !"); /**************** source FAQ Flux et réseaux **************/ /** copie le fichier source dans le fichier resultat * retourne vrai si cela réussit */ public static boolean copier( File source, File destination ) { boolean resultat = false; // Declaration des flux java.io.FileInputStream sourceFile=null; java.io.FileOutputStream destinationFile=null; try { // Création du fichier : destination.createNewFile(); // Ouverture des flux sourceFile = new java.io.FileInputStream(source); destinationFile = new java.io.FileOutputStream(destination); // Lecture par segment de 0.5Mo byte buffer[]=new byte[512*1024]; int nbLecture; while( (nbLecture = sourceFile.read(buffer)) != -1 ) { destinationFile.write(buffer, 0, nbLecture); } // Copie réussie resultat = true; } catch( java.io.FileNotFoundException f ) { } catch( java.io.IOException e ) { } finally { // Quoi qu'il arrive, on ferme les flux try { sourceFile.close(); } catch(Exception e) { } try { destinationFile.close(); } catch(Exception e) { } } return( resultat ); }
Ca ne marche pas avec des fichiers distantsEnvoyé par broumbroum
![]()
Par contre j'ai ce bout de code :
Mais quand je télécharge une image par exemple je ne vois pas tout, pourtant le fichier fait un peu pres la meme taille que l'original
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public void download(String u, String path) { java.io.FileOutputStream destinationFile=null; java.io.FileInputStream sourceFile=null; //String out=""; try { URL url = new URL(u); java.io.File destination=new java.io.File(path+new java.io.File(u).getName()); destination.createNewFile(); URLConnection connection = url.openConnection(); connection.setDoOutput(false); //sourceFile=new java.io.FileInputStream(source); destinationFile = new java.io.FileOutputStream(destination); java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(connection.getInputStream())); String line; while((line = reader.readLine()) != null) { destinationFile.write(line.getBytes()); destinationFile.write('\n'); } } catch(java.io.IOException ioe) { System.out.println("I/O Error on Navigation.download()"); } catch (Exception e) {} finally { try { destinationFile.close(); } catch(Exception e) {e.printStackTrace();} } }![]()
Je ne peux pas t'assurer que la méthode readline s'accompagne du retour à la ligne suivant "\n"...merci pour la correction URLConnection!
Envoyé par smarties
Les Reader/Writer sont fait pour lire des flux de caractères, c'est à dire des fichiers textes, et non pas des fichiers binaires !
Utilises des InputStream/OutputStream et base toi sur le code de copie de fichier de la FAQ, mais en utilisant une URL en entrée...
a++
Salut,
En même temps le titre de la question est "Comment copier ou déplacer un fichier ?"... donc c'est un peu normal que cela ne marche pasEnvoyé par smarties
![]()
Pour lire le contenu d'un fichier distant via HTTP il suffit d'utiliser la classe URL et sa méthode openStream()...
Ensuite le traitement est sensiblement le même que pour le copie...
a++
[edit] Grillé ! Trop lent![]()
Partager