Bonjour
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//il fait parti d'un pakage que j'avais commencer mais dont je n'ai pas le courrage de finir 
//package com.daedric.net.HTTP; 
import java.net.*; 
import java.io.*; 
 
 
 
//declaration de la classe 
 
public class HTTPGetFile { 
//constructeur de la classe : elle prend pour argument une chaine de caractere.... 
  protected String letype;
  protected String erreur="";
  protected int lenght;
  protected String montexte;
  public HTTPGetFile(String HOST, String lechemin) { 
 
 
      try { 
         //.... et l'utilise pour initialiser une url 
        URL racine = new URL(HOST); 
         //appel la methode getFile sur l'url pour commencer a recuperer le fichier 
         getFile(racine, lechemin); 
      }catch (MalformedURLException e) {erreur=erreur+(HOST + " : URL non comprise.");} 
       catch (IOException e) {  erreur=erreur+e.getMessage(); 
      } 
// ces ligne sont entoure d'un bloc try au cas ou il y aurait des exeption : par exemple si l'url n'es pas valide 
 
  } 
// commencement de get file avec comme argument l'url 
 
  public  void getFile(URL u, String lechemin) throws IOException { 
    //ouvre la connection 
    URLConnection uc = u.openConnection( ); 
    // regarde quel type est le fichier a telecharger 
    letype = uc.getContentType( ); 
    // recupere la taille du fichier ..... 
    int FileLenght = uc.getContentLength( ); 
    //uc.getContentEncoding();
    //....pour tester si c'est un fichier valide .
    if (FileLenght == -1 ) { 
 
     // erreur =erreur + "Fichier <font color=red>non</font> valide : (taille = -1) "+"</font>encoding : <font color=red>"+uc.getContentEncoding()+"  </font> &nbsp type :<font color=red>"+uc.getContentType()+"</font> &nbsp la taille : <font color=red>"+uc.getContentLength()+" </font> ";
    // erreur = erreur+" header : "+uc.getHeaderField()+" HEADER : "+uc.getHeaderFieldInt();
      throw new IOException( "Fichier <font color=red>non</font> valide : (taille = -1) "+"</font>encoding : <font color=red>"+uc.getContentEncoding()+"  </font> &nbsp type :<font color=red>"+uc.getContentType()+"</font> &nbsp la taille : <font color=red>"+uc.getContentLength()+" </font> "); 
    } 
    // le bloc si dessous jusqu'a entree.close permet de copier le fichier 
    // bit par bit ,en utilisant un tableau ,sur l'ordinnateur dans le repertoir local 
 //  uc.setRequestProperty()
    InputStream brut = uc.getInputStream( ); 
    InputStream entree = new BufferedInputStream(brut); 
    byte[] donnees = new byte[FileLenght]; 
    int BitRead = 0; 
    int deplacement = 0; 
    while (deplacement < FileLenght) { 
       BitRead = entree.read(donnees, deplacement, donnees.length-deplacement); 
       if (BitRead == -1) break; 
       //if (BitRead == '\n'){}
       deplacement += BitRead; 
    } 
    erreur =erreur + "<font color=green>Fichier  valide :   "+"</font>encoding : <font color=green>"+uc.getContentEncoding()+" </font> &nbsp type : <font color=green>"+uc.getContentType()+" </font>&nbsp la taille : <font color=green>"+uc.getContentLength()+"</font> "; 
    // ferme le flux 
    entree.close( ); 
    // regarder si le fichier est valide 
    if (deplacement != FileLenght) { 
      throw new IOException("Nous n'avons lu que " + deplacement 
       + " octets au lieu des " + FileLenght + " attendus"); 
    } 
    // recuperation de l'url pour une .... 
    //String FileName = u.getFile( ); 
    //....decortication de la chaine pour avoir le nom du fichier 
    //FileName = FileName.substring(FileName.lastIndexOf('/') + 1); 
    // ouverture d'un flux de donnee pour ecrire le fichier 
    FileOutputStream WritenFile = new FileOutputStream(lechemin); 
// ecrit le fichier sur l'ordinnateur 
    WritenFile.write(donnees); 
//vide le tampon au cas ou tout ne serai pas ecris 
    WritenFile.flush( ); 
//ferme le flux 
    WritenFile.close( );
   // String trans = new String(donnees);
  // montexte = trans;
  // lenght = montexte.length();
   //return montexte;
  } 
}

Voila quand je télécharge une série de fichier, mon code n'en récupere que la moitié, j'ai essayé d'analysé l'encodage du fichier mais apparement ce n'est pas ça , je comprend pas pourquoi il n'en obtient que la moitié ...

Quelqun a t'il une solution ?