Newsgroup: it.comp.java
Titolo: URI e File

Ciao a tutti! Il programma per l'esame è praticamente finito, ma manca
un piccolo dettaglio che non riusciamo a risolvere. Abbiamo bisogno di
caricare da Internet un file che prima caricavamo in locale. Abbiamo
visto sul javadoc del JDK 1.4.1 che si può istanziare un file
passandogli un URI; abbiamo provato il seguente codice per caricare un
file presente localmente sul disco rigido:
          String default = "file:///C:/TMP/default.xxx";
          File f = new File( new URI( default ));
e funziona tranquillamente.
Il passo successivo è naturalmente il tentativo di caricare il file
dalla rete. Dopo aver caricato su un host ftp gratuito il file
default.xxx, e verificato il corretto download da browser, abbiamo
pensato a qualcosa del genere:
          String default="
http://www.sito.xx/directory/default.xxx
";
          File f = new File( new URI( default ));
ma otteniamo la seguente eccezione:
 
          java.lang.IllegalArgumentException: URI scheme is not "file"
Quindi abbiamo pensato di cambiare o "scheme" in file:
 
          String default="file:///www.sito.xx/directory/default.xxx";
          File f = new File( new URI( default ));
ma abbiamo l'eccezione:
 
          java.io.FileNotFoundException: 
          \www.sito.xx\directory\default.gml 
          (Impossibile trovare il percorso specificato)
abbiamo anche provato un po' delle possibili combinazioni tra file:,
http: e il numero di / da inserire prima e dopo i :, ma senza ottenere
risultati migliori... eppure con il bowser il file lo scarichiamo
tranquillamente, ergo: sul sito il file c'è.
Forse mi è sfuggito qualche dettaglio delle URI? Bah...
Qualcuno ha qualche suggerimento? Grazie per l'attenzione, ciao!
GePs

Nella documentazione del file è specificato che l'URI deve essere di tipo
file:// quindi non si può usare un URI di tipo http. Un oggetto File infatti
rappresenta un elemento del filesystem e quindi non può essere un oggetto
http remoto.
Suppongo che a voi serva
InputStream input = new URI( default ).toURL().openStream();
Che vi fornisce l'InputStream da cui leggere il file remoto.
Probabilmente voi leggevate il file con un FileInputStream facendo new
FileInputStream(f), adesso dovete sostituire l'inputSream da file con quello
ottenuto dall'URL.
Ciao.
Paolo.

 Qualcuno ha qualche suggerimento?
Non e' questione di combinazioni, ma di capire quello che si sta facendo :)
La documentazione di file: dice chiaramente che l'URI deve avere protocollo 
"file:". Un url di quel tipo denota oggetti su filesystem, quindi non ha 
senso cercare di usarlo per oggetti che non sono accessibili via 
filesystem.
Quello che a voi interessa sono i dati contenuti, non il file di per se 
(immagino). Ora, il trucco e' che mentre il concetto di "file" ha senso 
solo su filesystem, il concetto di "stream di dati" e' molto piu' generale 
- e la libreria standard rispecchia questa cosa. Ad un certo punto il 
vostro codice fara' qualcosa come
File f = ...
...
InputStream s = new FileInputStream(f);
..blahblahblah..
(o l'equivalente in termini di Readers per stream di testo).
A questo punto, invece di File, per procurarvi lo stream dovete usare 
URL/URLConnection (cfr. la documentazione), con cose tipo
URL url = new URL("http://...");
URLConnection uc = url.openConnection();
uc.setDoInput(true);
InputStreams s = uc.getInputStream();
..blahblahblah..
Voila'.
-- 
Fighting for peace is like fucking for virginity
ObjectZone - 
http://space.tin.it/computer/csadun

 rappresenta un elemento del filesystem e quindi non puņ essere un oggetto


...
