Newsgroup: it.comp.java
Titolo: cartella di origine del programma java

In effetti non sapevo cosa mettere come oggetto, quindi mi spiego
meglio.
Dovrei  fare in modo di ottenere a runtime il percorso della cartella
di origine di un programma java, per intenderci la cartella dove
risiede il file jar che fa avviare il programma. Infatti, facendo
eventualmente un'installazione del programma, non posso sapere dove va
a inire il file jar e, quindi, il programma non riuscirebbe a trovare i
file temporanei che salvo. Potrei creare una cartella predefinita, ad
esempio in Documenti, ma vorrei sapere se c'è una soluzione come già
è possibile in Visual Basic. Avete qualche soluzione? Vi ringranzio
anticipatamente per l'interessamento e l'eventuale risposta.

argv[0]



Puoi ottenere la directory di partenza della tua applicazione tramite
System.getProperty("user.dir") o tramite java.io.File:
   String curdir=new File(".").getCanonicalPath();
La posizione del tuo jar di partenza non è rilevabile, almeno non con la
strumentazione standard. Questo è logico, perchè il tuo programma potrebbe
essere stato avviato prelevando il bytecode delle classi da fonti che non
siano file (database, webserver, socket diretti, porta seriale, ecc....).
Se devi creare dei file temporanei, non devi supporre di poterla salvare
nella stessa directory da cui parte il programma, perchè l'amministratore
del pc (o semplicemente il proprietario) potrebbe aver modificato i permessi
per l'utente corrente impedendogli l'accesso in scrittura proprio in quella
directory. É logico supporre invece che tutti gli utenti (compreso quello
meno privilegiato) abbiano il permesso di scrittura in una directory
dedicata ai file temporanei, prevista da tutti i sistemi operativi.
Puoi sapere il percorso di tale directory leggendo la proprietà
"java.io.tmpdir", ma se guardi la documentazione della classe java.io.File
troverai un'apposito metodo: createTempFile. Usandolo non dovrai
preoccuparti di dove verrà salvato il file, nè quale nome avrà (se ne occupa
il sistema operativo). Ricordati soltanto che una volta chiuso l'oggetto
File (quando sei sicuro che non ti serve più) dovrai richiamare su di esso
il metodo deleteOnExit(). Questo ti garantisce la sua eliminazione
automatica da parte della JVM nel momento in cui il tuo programma termina.
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
 - 
http://www.xenu.net
(per rispondere personalmente leva IlDitoDalCulo)

Mi sono serviti entrambi i tuoi suggerimenti. In effetti non avevo
pensato alla possibilità dei file in una cartella temporanea. Sei stao
chiaro ed esauriente. Grazie mille!!!!

Scusate ma dovre anche cercare id ricavare il percorso della cartella
Documenti. Ho provato ad utilizzare il metodo getDefaultDirectory()
della classe FileSystemView (javax.swing.filechooser) e mi ha
restituito proprio il percorso di Documenti.
Credo che vada bene perchè dovrebbe restituire il percorso della
cartella di default, tanto in windows che in altri sistemi. Che ne
pensate?



Quello che stai cercando in realtà è la home directory dell'utente attuale. 
La cosiddetta "cartella dei documenti" in Windows non è altro che la
sottodirectory "Documenti" all'interno della home. Questo percorso lo puoi
rilevare leggendo la proprietà di sistema "user.home" .
Se il tuo programma girerà su ambienti diversi da Windows, ti conviene
considerare direttamente questa directory, perchè non tutti i sistemi
operativi ne hanno una dedicata ai documenti... Certo, puoi considerare il
"caso particolare" verificando su che sistema operativo ti trovi, e da lì
sceglere se fermarti alla home directory oppure entrare in Documenti.
Esempio:
   ...
   //Ottieni la home directory
   String dovesalvare=System.getProperty("user.home");
   //Sistema operativo corrente
   String sistoper=System.getProperty("
os.name
");
   //Se si tratta di Windows...
   if (sistoper.toLowerCase().indexOf("windows")!=-1) {
      //aggiungiamo la cartella "Documenti"
      dovesalvare = dovesalvare +
                    System.getProperty("file.separator") +
                    "Documenti";
   }
   ...
 
Se ti interessa sapere quali altre informazioni puoi ottenere dalle
proprietà di sistema, prova ad eseguire questo programmino:
public class TestProps {
   public static void main(String[] args) {
      System.getProperties().list(System.out);
