[Java] Récupérer un fichier sur un site et l'enregistrer localement ?

Récupérer un fichier sur un site et l'enregistrer localement ? [Java] - Java - Programmation

Marsh Posté le 19-05-2004 à 23:18:45    

Bonsoir,
 
J'aimerais savoir comment je peux enregistrer un fichier distant (dont je possède l'url, par exemple : http://www.toto.com/truc.mp3) sur mon PC.
 
Je me perds dans toutes les classes StreamReader, FileWriter, FileInputStream, etc...
 
Merci :)


---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 19-05-2004 à 23:18:45   

Reply

Marsh Posté le 20-05-2004 à 02:03:59    

Code :
  1. try {
  2.   FileInputStream fis = new FileInputStream("http://www.toto.com/truc.mp3" );
  3.   FileOutputStream fos = new FileOutputStream ("c:/myFile.mp3" );
  4.   int size = fis.available();
  5.   byte[] tab = new byte[size];
  6.   fis.read(tab);
  7.   fos.write(tab);
  8.   } catch (IOException e) {
  9.     e.printStackTrace();
  10.     System.out.println("Le piratage de mp3, c'est mal" );
  11.   }
  12. }



Message édité par seabee le 20-05-2004 à 02:12:12
Reply

Marsh Posté le 20-05-2004 à 12:48:57    


 
Merci mais justement ça ne fonctionne pas pour un fichier distant.
Si je remplace "http://www.toto.com/truc.mp3" par "c:\\tatayoyo.mp3", là oui, ça marche.


Message édité par max2048 le 20-05-2004 à 12:50:12

---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 20-05-2004 à 13:28:15    

max2048 a écrit :

Merci mais justement ça ne fonctionne pas pour un fichier distant.
Si je remplace "http://www.toto.com/truc.mp3" par "c:\\tatayoyo.mp3", là oui, ça marche.


 
Passe par une URI.

Reply

Marsh Posté le 20-05-2004 à 14:57:26    

Comment ça ?


---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 20-05-2004 à 15:08:31    

Chais pas.. Essaie ça:
 

Seabee a écrit :

Code :
  1. try {
  2.   String path = "http://www.toto.com/truc.mp3";
  3.   FileInputStream fis = new FileInputStream(new File(new URI(path)));
  4.   FileOutputStream fos = new FileOutputStream ("c:/myFile.mp3" );
  5.   int size = fis.available();
  6.   byte[] tab = new byte[size];
  7.   fis.read(tab);
  8.   fos.write(tab);
  9.   } catch (IOException e) {
  10.     e.printStackTrace();
  11.     System.out.println("Le piratage de mp3, c'est mal" );
  12.   }
  13. }



Reply

Marsh Posté le 20-05-2004 à 15:44:18    

Euh oui mais non :

Citation :


public File(URI uri)
 
    Creates a new File instance by converting the given file: URI into an abstract pathname.
[...]
Parameters:
    uri - An absolute, hierarchical URI with a scheme equal to "file" [...]


Donc http passera pas [:spamafote]
 
Pour moi faut passer par l'ouverture d'une HttpUrlConnection et récupérer le résultat d'un GET en utilisant getInputStream() :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 15:48:45    

Taiche a écrit :

Euh oui mais non :

Citation :


public File(URI uri)
 
    Creates a new File instance by converting the given file: URI into an abstract pathname.
[...]
Parameters:
    uri - An absolute, hierarchical URI with a scheme equal to "file" [...]


Donc http passera pas [:spamafote]
 
Pour moi faut passer par l'ouverture d'une HttpUrlConnection et récupérer le résultat d'un GET en utilisant getInputStream() :o


 
 [:aha] Je trouve tout ça bien pourrave!
Mais bon, si File est pas foutu de fetcher par http, alors ben oui, faudra passer HttpUrlConnection ou un truc du genre


Message édité par seabee le 20-05-2004 à 15:48:59
Reply

Marsh Posté le 20-05-2004 à 15:51:08    

Seabee a écrit :

[:aha] Je trouve tout ça bien pourrave!
Mais bon, si File est pas foutu de fetcher par http, alors ben oui, faudra passer HttpUrlConnection ou un truc du genre


Ba c'est surtout débile de proposer un constructeur avec une URI dedans si c'est pour ne prendre que les trucs en "file://" :/


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 15:54:02    

Taiche a écrit :

Ba c'est surtout débile de proposer un constructeur avec une URI dedans si c'est pour ne prendre que les trucs en "file://" :/


 
 [:2501] C'est exactement ce que je voulais dire mais j'arrive pas à m'exprimer aujourd'hui  [:aha]

Reply

Marsh Posté le 20-05-2004 à 15:54:02   

Reply

Marsh Posté le 20-05-2004 à 16:26:19    

Taiche a écrit :

Ba c'est surtout débile de proposer un constructeur avec une URI dedans si c'est pour ne prendre que les trucs en "file://" :/

ce qui est surtout débile à la base c'est de vouloir ouvrir un fichier distant avec File
ensuite, URI etant une maniere uniforme de representer une resource, ça me parait ok d'avoir un constructeur de file qui prend une URI.
(évidemment l'idéal serait d'avoir une hierarchie de classes qui ferait qu'on puisse de façon transparente ouvrir n'importe quelle resource - et en fait je pense que c'est jouable en java mais me rappelle plus comment à l'instant)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 20-05-2004 à 16:36:12    

the real moins moins a écrit :

ce qui est surtout débile à la base c'est de vouloir ouvrir un fichier distant avec File
ensuite, URI etant une maniere uniforme de representer une resource, ça me parait ok d'avoir un constructeur de file qui prend une URI.
(évidemment l'idéal serait d'avoir une hierarchie de classes qui ferait qu'on puisse de façon transparente ouvrir n'importe quelle resource - et en fait je pense que c'est jouable en java mais me rappelle plus comment à l'instant)


 
File est la représentation abstraite d'un fichier : conceptuellement, il n'y a rien de choquant à ce que celui-ci soit une ressource web [:*syl*]


Message édité par seabee le 20-05-2004 à 16:36:27
Reply

Marsh Posté le 20-05-2004 à 16:36:47    

the real moins moins a écrit :

ce qui est surtout débile à la base c'est de vouloir ouvrir un fichier distant avec File


Non, je vois pas pourquoi.

the real moins moins a écrit :


ensuite, URI etant une maniere uniforme de representer une resource, ça me parait ok d'avoir un constructeur de file qui prend une URI.
(évidemment l'idéal serait d'avoir une hierarchie de classes qui ferait qu'on puisse de façon transparente ouvrir n'importe quelle resource - et en fait je pense que c'est jouable en java mais me rappelle plus comment à l'instant)


Ba c'est c'que j'dis [:spamafote] Utiliser une URI en constructeur mais limiter à file:// ça restreint horriblement et j'avoue ne pas bien saisir l'intérêt.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 16:38:41    

Seabee a écrit :

File est la représentation abstraite d'un fichier : conceptuellement, il n'y a rien de choquant à ce que celui-ci soit en une ressource web [:*syl*]

ben nan File c'est une representation abstraite d'un fichier sur le file system local http://membres.lycos.fr/gggrrrreeeggg/itm/itmb.gif
passer par URI ou URL c'est bon, mais apres vouloir passer par FileInputStream et compagnie ça l'est pas http://membres.lycos.fr/gggrrrreeeggg/itm/itmr.gif
 
(d'aiilleurs tu peux avoir l'inputstream ou l'url connection depuis URL, et ça marche probablement en local http://membres.lycos.fr/gggrrrreeeggg/itm/itmv.gif


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 20-05-2004 à 16:41:52    

Taiche a écrit :


Pour moi faut passer par l'ouverture d'une HttpUrlConnection et récupérer le résultat d'un GET en utilisant getInputStream() :o


 
+1 avec le dindon :O


---------------
IVG en france
Reply

Marsh Posté le 20-05-2004 à 16:42:35    

the real moins moins a écrit :

ben nan File c'est une representation abstraite d'un fichier sur le file system local  


:non: Tu peux très bien ouvrir des fichiers en réseau local s'ils sont mappés sur ta machine.
 
EDIT : ou même en utilisant des paths de type UNC sur les machines Windows :o


Message édité par Taiche le 20-05-2004 à 16:43:13

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 16:46:45    

Taiche a écrit :

:non: Tu peux très bien ouvrir des fichiers en réseau local s'ils sont mappés sur ta machine.
 
EDIT : ou même en utilisant des paths de type UNC sur les machines Windows :o

ce qui revient au meme au niveau de l'os, contrairement à une resource http


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 20-05-2004 à 17:00:48    

the real moins moins a écrit :

ce qui revient au meme au niveau de l'os, contrairement à une resource http


Oui et c'est bien là le problème : c'est au développeur de faire la différence. Et dans pas mal de cas, il a pas forcément accès au type de la donnée et il doit se palucher les tests d'accès au fichier avant de pouvoir le lire.
J'trouve ça dommage [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 17:04:26    

Taiche a écrit :

Oui et c'est bien là le problème : c'est au développeur de faire la différence. Et dans pas mal de cas, il a pas forcément accès au type de la donnée et il doit se palucher les tests d'accès au fichier avant de pouvoir le lire.
J'trouve ça dommage [:spamafote]

ben non, tu passes par URL.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 20-05-2004 à 17:06:14    

the real moins moins a écrit :

ben non, tu passes par URL.


:??:
Si tu veux dire "mets tout dans des URI", ba non c'est ce que je veux dire quand je dis que le dev contrôle pas forcément le type de donnée qui lui est envoyé. Un coup ça peut être un path local, un coup une URL, etc...


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 17:10:26    

new URL("file://blah/truc.txt" );
 
s'il "controle" pas le format de la chaine passée là, ben ouais forcement, je vois pas ce qui pourrait marcher par magie


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 20-05-2004 à 17:13:09    

the real moins moins a écrit :

new URL("file://blah/truc.txt" );
 
s'il "controle" pas le format de la chaine passée là, ben ouais forcement, je vois pas ce qui pourrait marcher par magie


"Par magie", non, mais si le constructeur de File ne limitait pas les URI à des schémas de type file, bin ça s'rait déjà pas mal.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 17:15:53    

Taiche a écrit :

"Par magie", non, mais si le constructeur de File ne limitait pas les URI à des schémas de type file, bin ça s'rait déjà pas mal.

mais bordel.
pourquoi tu voudrais passer par un File si tu connais pas le type de resource!
tu passes par Url.openConnection/openStream .|


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 20-05-2004 à 18:20:25    

Taiche a écrit :

"Par magie", non, mais si le constructeur de File ne limitait pas les URI à des schémas de type file, bin ça s'rait déjà pas mal.


nan mais ke problème il vient de l'interface de File : on ne peut pas faire toutes les opérations qu'on fait sur un File à partir d'une URI : lister les fichiers, obtenir la date de création, créer un répertoire, etc ... ce n'est pas permis par le protocole http.
 
Ce dont tu parle, c'est plutot la classe URL qui permet d'abstraire le type de document et donne une méthode d'accès au flux binaire.
 
en bref, +1 avec moins moins :o

Reply

Marsh Posté le 20-05-2004 à 18:34:38    

Ah :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 18:51:19    

Bon finalement j'y suis arrivé :)
 
Pour ceux que ça intéresse :
 

Code :
  1. try {
  2.   URLConnection ucon = new URL("http://www.machin.com/toto.jpg" ).openConnection();
  3.   FileOutputStream fos = new FileOutputStream("C:\\tata.jpg" );
  4.   InputStream in = ucon.getInputStream();
  5.   int b = 0;
  6.   while ((b = in.read())!= -1)
  7.    fos.write(b);
  8.   fos.close();
  9.  }
  10.  catch (Exception e){
  11.   System.out.println(e);
  12.  }


 
Je sais pas si c'est bien fait, dans le sens où on lit byte par byte, mais en tout cas ça fonctionne.
 
Un lien qui explique brièvement les I/O : http://java.sun.com/docs/books/tut [...] rview.html


---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 20-05-2004 à 18:52:26    

y a pas moyen de faire un tableau de byte ou alors de bufferiser tout ca ?


---------------
IVG en france
Reply

Marsh Posté le 20-05-2004 à 19:06:45    

[:dragonman] Ouais faudrait bufferiser passke là, point de vue perfo, spa terrible :D


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-05-2004 à 20:16:51    

Taiche a écrit :

[:dragonman] Ouais faudrait bufferiser passke là, point de vue perfo, spa terrible :D


 
 [:ludal the lethal]  
read peu prendre un tableau de byte, write aussi.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed