Newsgroup: it.comp.java
Titolo: Applicazion java: come recuperare il path dei file .class?

Ciao,
sto scrivendo un'applicazione che deve girare su piattaforme diverse ma con
java 1.1.8 (no java 2).
Devo leggere dei files prelevandoli da un percorso indipendente dal file
system utilizzato (no "/c:/" o "..\", ecc.).
Ho pensato di piazzare i miei files nella stessa cartella con i .class e di
trovarli cosě:
     java.net.URL tempurl = this.getClass().getResource("myfile");
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

Il classpath lo trovi nella variabile di sistema "java.class.path".
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
|

 wrote in message
news:3b1b4892.900591161@martines...


Se l'utente lancia il programma dalla directory in cui e' installato il programma,
"./miofile.dat" dovrebbe essere sufficiente. 
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.


|


 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?


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.


 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


Okay, ultima cosa prorpio per capire io.
Puoi configurare anche "java -Dapp.dir=/sih/tmp0 userprg.MainClass"?
Questa "/sih/tmp0" sarebbe la directory in cui decidi di mettere i tuoi file.
Torna?
Ciao,


 Torna?
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?


Secondo e' funzionale solo se questo file di configurazione lo crei in fase di
installazione (quando cioe' l'utente o chi per lui sceglie dove installare il programma).
Per quanto riguarda windows io lo lancerei senza settare la variabile ambiente,
riconoscerei il sistema operativo e userei "." come directory in cui cercare i file.
HTH,
    Bruno.


|
