Newsgroup: it.comp.java
Titolo: Lettura file 2

Salve a tutti
Avendo fatto qualche prova, riformulo meglio il quesito già presentato.
 
Con Mozilla un file di dati viene letto purchè sia presente nella cartella 
che contiene il file sorgente, semplicemente indicando il nome del file e 
senza indicarne il percorso.
Ad esempio questa istruzione va bene
FileInputStream fin = new FileInputStream("Mondo_coord.txt");
 
Con Internet Explorer tale istruzione non produce effetto ma deve essere 
indicato assieme al nome del file anche il percorso completo, come ad 
esempio
FileInputStream fin = new 
FileInputStream("D:/Java/Ortodromia/Mondo_coord.txt");
oppure
FileInputStream fin = new 
FileInputStream("/Java/Ortodromia/Mondo_coord.txt");
 
Questo mi crea problemi per la distribuzione dell'applet poichè non posso 
sapere in anticipo in quale cartella utente verrà istallata e, ovviamente, 
deve ugualmente funzionare sia con Firefox che con I.E.
 
Avete qualche suggerimento?
Grazie
Franco Martinelli
 
 
 

 ovviamente, deve ugualmente funzionare sia con Firefox che con I.E.
 
se non ho capito male stai facendo girare un applet su una pagina html 
locale sul client. premesso che questa è una stupidaggine, il tuo 
problema è chiaramente che firefox considera la directory dove si trova 
l'applet come directory corrente mentre internet explorer no. 
 
se il file si trova nel classpath puoi provare a leggerlo con getClass
().getResourceAsStream(). se invece così non è non ti resta che 
depositare il file in una locazione nota, per esempio sotto la home 
directory dell'utente che puoi ricavare con System.getProperty
("user.home"). ma la cosa meglio da fare sarebbe smettere di usare gli 
applet in questo modo (perdonami) a capocchia, se tu avessi scritto una 
normale applicazione sarebbe stato tutto più semplice.
 
 

rootkit (25/03/2012):

Le basi, dannazione, le basi! :D
 
Il problema è che un'applet eredita il contesto di sicurezza del
browser, e quindi dipende totalmente da come il browser considera
"sicure" le pagine visualizzate.
 
In generale, accedere direttamente al filesystem da un'applet è
un'operazione *non sicura*, consentita (da firefox, ma non dovrebbe
nemmeno permetterlo) esclusivamente in virtù del fatto che la pagina
visualizzata proviene dal filesystem locale. In parole povere, se l'url
della pagina contenitore inizia per "file:///" è possibile che firefox
consenta al plugin Java di accedere ai file nei dispositivi locali.
 
Tutto ciò però è sbagliato, perchè un'applet deve sempre essere
considerata un "pezzo di codice" proveniente dall'esterno, eseguibile
senza che l'utente venga informato dei suoi effetti. In sostanza, non
sicuro.
 
@EffeEmme: se non ho capito male, la tua applicazione deve caricare dei
dati applicativi da rendere a video in formato grafico.
 
Se i dati applicativi in generale rimangono invariati, e vuoi rimanere
su applet perchè rimane più comoda la distribuzione
(comprensibilissimo), hai due strade:
 
- come proposto da rootkit, includere i file testuali tra i sorgenti
della tua applicazione, ed usare getResourceAsStream() per ottenerne il
contenuto
- portare l'applet, la pagina ospitante ed i tuoi file di testo
all'interno di un vero webserver, e usare transazioni http per
prelevare i file direttamente dal server (l'applet ha piena libertà di
accesso al server di provenienza)
 
Se invece hai assoluta necessità di accedere al pc dell'utente che
esegue la tua applet (ad esempio per salvare o ricaricare documenti),
hai comunque due strade:
- firmare l'applet in modo che venga considerata affidabile (e qui devi
capire il funzionamento dei certificati SSL)
- usare Java Web Start e JNLP al posto della applet. Questo "mondo" è
leggermente diverso dalle applet, tutte le risorse sono visibili come
servizi, forniti o meno alla tua applicazione a seconda
dell'approvazione dell'utente. Trovi la guida qui:
 
http://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/contents.html
 
 
e la documentazione delle API qui:
 
http://docs.oracle.com/javase/7/docs/jre/api/javaws/jnlp/
 
 
A differenza delle applet, nel momento in cui tenti di ottenere il
servizio ExtendedService (che è il tuo caso) viene visualizzata una
finestra che informa l'utente dell'operazione richiesta, e della
possibilità di negare l'autorizzazione.
 
Questi messaggi non verranno più visualizzati quando la tua
applicazione sarà firmata con un certificato valido, ma fino a quel
momento, e finchè l'utente autorizza esplicitamente l'accesso, la tua
applicazione non verrà bloccata e funzionerà allo stesso modo in tutti
i browser.
 
Hope that helps.
 
-- 
erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB
9F F4 A3 88 F8 12 48 2B E2 1B riv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B
59 F4 C1 4D - further info: Google it!
(per rispondere personalmente leva IlDitoDalCulo)
 
 

 sicuro.
 
ho premesso subito che un applet usata in questo modo è una sciocchezza, 
per di più eseguendola da fs locale non ha nemmeno alcun vantaggio nella 
distribuzione facilitata. le mie proposte erano solo per tentare di 
rattoppare ma la mia risposta vera sarebbe "riscrivi come applicazione". 

Grazie per i suggerimenti ( e le tirate d'orecchie).
Ne terrò conto
F.Martinelli