IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Passer d'une URL à un FileInputStream ou File


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut Passer d'une URL à un FileInputStream ou File
    Bonjour,

    Je ne suis pas très à l'aise dans ce domaine et j'aimerais donc avoir quelques avis sur la question.

    J'aimerais récupérer un fichier via une URL.
    J'ai parcouru le forum pour essayer de trouver une solution mais je n'ai pas réussi à faire fonctionner mon programme...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    URL url = null;
            try {
                url = new URL("http://mon_url");
            } catch (MalformedURLException ex) {
                System.out.println(ex);
            }
    Une fois que j'ai mon URL je ne sais pas trop vers quoi m'orienter.
    En regardant l'API, j'ai essayé de passer par ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    File file = null;
            try {
                file = new File(url.toURI());
            } catch (URISyntaxException ex) {
                System.out.println(ex);
            }
    Mais il me retourne une erreur:
    java.lang.IllegalArgumentException URI scheme is not "file"
    Sinon apparemment l'autre moyen serait de passer par un BufferedInputStream:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BufferedInputStream input = null;
            try {
                input = new BufferedInputStream(url.openStream());
            } catch (IOException ex) {
                System.out.println(ex);
            }
    Mais dans ce cas là je ne sais pas comment arriver à faire le lien avec un File...

    Merci d'avance

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 688
    Par défaut
    Il faut que tu lise le BufferedInputStream (avec les instruction read()) et que tu écrives ce que tu lis dans un fichier, par exemple avec un FileOutputStream (et ses instructions write()).

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut
    Merci mais je ne comprend pas comment faire le lien entre ce BufferedInputStream et un FileOutputStream...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try {
          int c;
          while ((c =  in.read()) != -1) {
                 *?*.write(c);
          }
    } finally {
          if (in !=null)
               in.close();
    }
    Si je crée un FileOutputStream il me faut un paramètre à la création, du genre un File ou un String... mais comme c'est se que je cherche à avoir

    Je ne sais pas dans quel type d'élément je peux stocker ce qui se trouve dans mon buffer :/

    edit: grillé aussi >_<, je vais tester ça m'enfin au lieu de le stocker en dur n'y a t-il pas un moyen de rester dans la mémoire ?

  4. #4
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 133
    Par défaut
    Change l'adresse du fichier à récupérer pour tester, ça devrait passer.

    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
     
     
    import static org.junit.Assert.assertNotNull;
    import static org.junit.Assert.fail;
     
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.net.URL;
     
    import org.junit.Test;
     
     
    public class RetrieveFileByHttp {
     
    	private static String FILE_URL = "http://10.85.56.34/";
     
    	@Test
    	public void testRetrieve() {
    		URI uri;
    		try {
    			uri = new URI(FILE_URL);
    			URL url = uri.toURL();
     
    			InputStream stream = url.openStream();
    			assertNotNull(stream);
    			BufferedReader br = new BufferedReader(new InputStreamReader(stream));
     
    			String line;
    			while ((line = br.readLine()) != null) {
    				System.out.println(line);
    			}
     
    			stream.close();
    			return;
    		} catch (URISyntaxException e) {
    			e.printStackTrace();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		fail();
    	}
    }

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 22
    Par défaut
    Merci, grâce à ce code j'arrive à récupérer mon document dans un String \o/

    Mon code n'a plus d'erreur mais il ne me permet pas d'afficher le contenu de mon fichier :s
    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
    FileInputStream edT = null;
            URL url = null;
            try {
                url = new URL("http://xxxxxxxx");
            } catch (MalformedURLException ex) {
                System.out.println(ex);
            }
            String line = null;
            try {
    			InputStream stream = url.openStream();
    			BufferedReader br = new BufferedReader(new InputStreamReader(stream));
     
    			while ((line = br.readLine()) != null) {
    				System.out.println(line);
    			}
     
    			stream.close();
    			return;
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
            try{
                edT = new FileInputStream(line); // Pas bon :s
            }catch(Exception ex){
                System.out.println(ex);
            }
    Maintenant le problème est de savoir se que je peux passer en paramètre de mon FileInputStream pour récupérer mes données.

    Vu que j'utilise la librairie de icalj4 pour la suite je suis obligé de passer par un FileInputStream...

    Convertir un String en File ? J'ai pas trouvé comment faire :/

  6. #6
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 133
    Par défaut
    Une methode qui ecrit le contenu d'un stream dans un stream de sortie :

    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
     
    	private void writeToStream(InputStream in, OutputStream out) {
    		BufferedReader inReader = new BufferedReader(new InputStreamReader(in));
    		OutputStreamWriter outWriter = new OutputStreamWriter(out);
     
    		String line = null;
    		try {
    			while ((line = inReader.readLine()) != null) {
    				outWriter.write(line);
    			}
                            outWriter.flush();
                            in.close();
                            outWriter.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    		        uri = new URI(FILE_URL);
    			URL url = uri.toURL();
     
    			InputStream in = url.openStream();
    			assertNotNull(in);
     
    			this.writeToStream(in, new FileOutputStream(new File("output")));
     
    			in.close();
    Et par la suite, instancie ton FileInputStream avec en parametre le File de sortie.

    En esperant que ça convienne.

    Edit : Il faut toujours fermer un reader et un writer. (close())

  7. #7
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    effectivement pour ouvrir un File sur une URL il faut qu'elle soit de type "//file://c:/toto.txt"
    Pour une URL réseau, il faut bien récupérer le BufferedInputStream.
    Ensuite ce qu'il te reste à faire, c'est le recopier dans un objet File avec un truc du genre
    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
     
    BufferedReader input = null;
            try {
                input = new BufferedReader(new InputStreamReader(url.openStream()));
            } catch (IOException ex) {
                System.out.println(ex);
            }
    		FileWriter fw = new FileWriter("fichier.txt");
    		String s = input.readLine();
    		while(s!=null){
    		 fw.write(s);
    		 fw.write("\n");
    		 s = input.readLine();
    		}
    }
    En rajoutant bien sur la gestion des flux et des exceptions...

    edit: bien grillé :'(

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] passer une variable php dans une url
    Par griese dans le forum Langage
    Réponses: 27
    Dernier message: 12/06/2006, 09h02
  2. Passer une URL dans un form avec POST
    Par dldstyle dans le forum Langage
    Réponses: 5
    Dernier message: 30/04/2006, 20h09
  3. [javascript]passer un bout de javascript dans une url
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/03/2006, 14h27
  4. [Net]Création d'une URL à partir d'une File
    Par maxvador dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/12/2005, 21h22
  5. [net] recuperer les proprietes d'un File via une URL
    Par mma dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/05/2004, 12h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo