ma l'oggetto URL restituito non mi consente di recuperare il PATH da
utilizzare, poi, con:
fd = new RandomAccessFile(mypath,"r");
ricordo a tutti che: url.getPath(); funziona solo su java 2!!! (mannaggia)
Il metodo da me individuato (l'URL) potrebbe essere interessante se
esistesse un modo per aprire un RandomAccessFile partendo dall'URL anzichč
dalla stringa con il path.
Qualche idea?
Grazie in anticipo,
Romano
public class Temp
{
public static void main(String args[])
{
System.out.println("Class path: "+System.getProperty("java.class.path"));
}
}
La tua soluzione pero' non e' che mi convinca molto: se vuoi qualche suggerimento pero'
dovresti chiarire il contesto del problema.
Ciao,
Bruno.
|
| Bruno Bossola
| A Java Software Engineer :-)
| http://bbruno.fasturl.it
|
| http://members.xoom.it/bbruno
| http://digilander.iol.it/bbossola
|
A me serve recuperare senza ombra di dubbio il path che contiene i files
.class del mio progetto, in quanto è li' che inserirò i miei files di
supporto da leggere runtime.
Esempio:
- progetto prova, composto dalle classi Class1 e Class2, il tutto contenuto
nella cartella c:\prova\classes
Dato che non conosco a priori dove il cliente ha copiato i files .class
(potrebbe essere su "C:\pippo", su "/D:/prova", oppure su "/tffs0/prova" o
altro). A runtime, devo poter recuperare questa informazione.
L'istruzione this.getClass().getResource("miofile.dat"); restituisce un URL
che punta ad un file contenuto in quella cartella, qualunque essa sia.
Purtroppo, l'oggetto URL, non mi restituisce il path completo (esempio:
"/tffs0/prova/miofile.dat") in quanto il metodo URL.getPath() è stato
implementato solo dalla versione 2 di Java (io uso la 1.1.8 e NON posso
cambiare...).
Mi occorre il path in quanto devo aprire il mio file tramite la classe
RandomAccessFile che vuole una stringa con il path completo del file da
aprire. Non esiste un costruttore RandomAccessFile(URL).
Mi ritrovo, quindi, con due strumenti tramite i quali posso singolarmente
risolvere un problema, ma che non si parlano tra loro.
Qualche altra idea?
grazie
Romano
"Bruno Bossola" <bbos...@hotmail.com> wrote in message
news:3b1b4892.900591161@martines...
E' possibile anche conoscere la directory corrente consultando la variabile di sistema
"user.dir":
public class Temp
{
public static void main(String args[])
{
System.out.println("Current dir: "+System.getProperty("user.dir"));
}
}
Un'altra soluzione e' che in fase di installazione venga generato un batch per il lancio
del programma che contenga al suo interno la definizione di una variabile ambiente
specifica della sua applicazione nella quale si setta la directory applicativa.
java -Dapp.directory=/usr/boss Application
E' comunque possibile da un URL ottenere qualcosa di decente applicando il metodo
toString(): ha gia' provato? Una volta ottenuta una stringa, la si puo' eventualmente
parsificare.
Ci stiamo avvicinando?
Ciao,
Bruno.
|
Sul sistema operativo VxWorks (sul mio target), "../miofile" non funziona
> E' possibile anche conoscere la directory corrente consultando la
variabile di sistema
> "user.dir":
La variabile di sistema "user.dir", così come tutte le variabili di sistema,
la imposto io quando configuro l'installazione di VxWorks.
La cosa potrebbe anche essere accettabile, ma non posso utilizzarla in
quanto il programma java deve essere installabile in qualsiasi directory,
diversa da quella che io specifico in user.home
> Un'altra soluzione e' che in fase di installazione venga generato un batch
per il lancio
> del programma che contenga al suo interno la definizione di una variabile
ambiente
> specifica della sua applicazione nella quale si setta la directory
applicativa.
Purtroppo non esistono files batch in VxWorks. È possibile fare qualcosa di
simile a quanto tu suggerito, ma si ricade nello stesso caso esaminato
modificando direttamente la proprietà user.home
> E' comunque possibile da un URL ottenere qualcosa di decente applicando il
metodo
> toString(): hai gia' provato? Una volta ottenuta una stringa, la si puo'
eventualmente
> parsificare.
Provato. In Windows tutto ok. La stringa contiene il path bello in chiaro.
In VxWorks mi riporta una strana "systemproperty:/FILE$4+/miofile.dat" dal
quale riesco ad estrarre il nome file ma non il path (che è qualcosa tipo
"/tffs0/java/miofile.dat").
> Ci stiamo avvicinando?
Direi di si'.
Forse l'unica soluzione possibile consiste nel vincolare l'installazione su
VxWorks.
Cioè: se posso installare l'applicazione in qualsiasi directory di Windows e
ricavare il path da user.home ma non posso farlo in Vxworks, limito l'utente
forzandolo ad installare l'applicazione in una directory ben precisa, almeno
in VxWorks. E configuro Vxworks perchè mi restituisca la directory in
questione in user.home.
Cosa dici?
>Direi di si'.
>Forse l'unica soluzione possibile consiste nel vincolare l'installazione su
>VxWorks.
>Cioč: se posso installare l'applicazione in qualsiasi directory di Windows e
>ricavare il path da user.home ma non posso farlo in Vxworks, limito l'utente
>forzandolo ad installare l'applicazione in una directory ben precisa, almeno
>in VxWorks. E configuro Vxworks perchč mi restituisca la directory in
>questione in user.home.
>
>Cosa dici?
>
1. Perche' sei vincolato alla variabile user.home? Tu puoi usare qualunque variabile,
basta che la specifichi quando lanci la VM con -D. Secondo me non ti conviene modificare
user.home per lo specifico uso della tua applicazione: e' meglio se trovi il modo di usare
un'altra variabile.
2. Non ho capito se puoi o non puoi generare un batch (o equivalente). Puoi?
3. Se (2) e' vera allora ti consiglio di customizzare la procedura di installazione, senza
forzare l'utente ad installare l'applicazione in una posizione specificata. A questo punto
il batch(?) passerebbe alla VM allo startup la variabile ambiente contenente la directory.
4. Se (2) e' falsa allora non c'e' nulla da fare, forza l'utente.
HTH,
Bruno.
> 1. Perche' sei vincolato alla variabile user.home? Tu puoi usare qualunque
variabile,
> basta che la specifichi quando lanci la VM con -D. Secondo me non ti
conviene modificare
> user.home per lo specifico uso della tua applicazione: e' meglio se trovi
il modo di usare
> un'altra variabile.
è un po' difficile da spiegare, ma, in sintesi, il sistema parte ed esegue
automaticamente il programma java (che per l'utente è un po' come vedere
partire Windows): no GUI intermedio tipo Windows. Il modo con cui il sistema
parte e lancia l'applicazione, lo decido io, in fase di configurazione di
VxWorks. Cosa faccia l'applicazione java dell'utente, lo decide lui. Io mi
limito a lanciare un comando tipo "java userprg.MainClass" che sarà da
qualche parte nel classpath, ma non so dove a priori...
> 2. Non ho capito se puoi o non puoi generare un batch (o equivalente).
Puoi?
Si, ma più che un "java userprg.MainClass" non potrei fare. Per vincoli
progettuali del mio sistema.
> 3. Se (2) e' vera allora ti consiglio di customizzare la procedura di
installazione, senza
> forzare l'utente ad installare l'applicazione in una posizione
specificata. A questo punto
> il batch(?) passerebbe alla VM allo startup la variabile ambiente
contenente la directory.
Essendo un sistema embedded, non esiste installazione. Si copiano i files in
posizioni documentate e poi si resetta... oppure si fanno altre operazioni
che poco hanno a che spartire con i sistemi desktop.
> 4. Se (2) e' falsa allora non c'e' nulla da fare, forza l'utente.
Ci ho riflettuto un po' e penso che la scelta di forzare l'utente a copiare
i suoi files in una posizione ben precisa non sia troppo vincolante. Tutto
sommato non si tratta di un sistema desktop multicolore, multiconfigurato e
multipersonalizzato (e passibile di multidisastro). Qui tutto deve essere il
più ordinato possibile ed il vincolo dell'installazione può essere
accettabile.
Ti ringrazio per l'interessamento. Buon lavoro.
Ciao
Ciao,
Si, posso. uhm... sto riflettendo... mumble mumble...
Il tuo suggerimento potrebbe essere applicato così:
Preparo un file di configurazione (es.: un txt, ini, o altro), che leggo
all'accensione (ancora java non è partito e faccio tutto in c++) dal quale
estraggo alcuni parametri utili, uno di questi, la directory dove è
installato il programma java.
Poi faccio lanciare il programma java dandogli in pasto la proprietà con il
parametro letto dal file di configurazione. Esempio:
"java -Dapp.dir=/tffs0/java/mydir/myapp userprg.MainClass".
In questo modo l'utente potrebbe modificare la locazione dei suoi files in
VxWorks modificandomi anche il file di configurazione (che si trova in una
locazione nota).
Per il lancio in Windows, basta ripetere l'istruzione
"java -Dapp.dir=/tffs0/java/mydir/myapp userprg.MainClass" ricordandosi di
digitare il path dove sono localizzati i files da leggere...
Che dici, sta in piedi?
HTH,
Bruno.
|