Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema directory del jar in esecuzione, con passaggio di args

    Ciao! Ho scritto un codice nel quale a un certo punto scansiono i file presenti nella stessa cartella del jar che sto eseguendo. Per far ciò usavo:
    codice:
                
    Path currentRelativePath = Paths.get("");
    String str = currentRelativePath.toAbsolutePath().toString();
    Ha sempre funzionato alla grande. Però se passo un argument, il valore restituito da Paths.get("") risulta essere args[0]. Ciò ovviamente impedisce al programma di svolgere il suo compito.

    C'è un metodo più adatto per ottenere la directory del jar senza avere questo tipo di complicazione?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    Però se passo un argument, il valore restituito da Paths.get("") risulta essere args[0].
    Gli args (String[]) del main di per sé non c'entrano assolutamente nulla con la directory "corrente" o la directory dove è fisicamente presente il jar (e queste due directory possono anche non coincidere!).
    Bisognerebbe capire meglio cosa hai fatto .... perché non mi è chiara la implicazione degli args.

    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    C'è un metodo più adatto per ottenere la directory del jar senza avere questo tipo di complicazione?
    Tecnicamente sì. Se ben ricordo (prova tu, appena ho un attimo verifico) se il jar si lancia con java -jar nome.jar, la system-property "java.class.path" è proprio il path del jar (e se di nuovo ricordo bene, il path è relativo alla directory corrente). Io però per scrupolo non userei questa tecnica.

    Altrimenti prendi una tua classe che è certamente nel tuo jar, dal Class prendi il ProtectionDomain, poi il CodeSource, poi Location e hai il URL.

    Qualcosa del tipo (verifica tu, l'ho scritto al volo solo guardando il javadoc):

    codice:
    URL urlJar = UnaTuaClasse.class.getProtectionDomain().getCodeSource().getLocation();
    File fileJar = new File(urlJar.toURI());
    File dirJar = fileJar.getParentFile();
    Ultima modifica di andbin; 29-01-2015 a 11:57
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Il motivo per cui la currentPath cambia, è perché ho settato i registri di windows, in modo che facendo doppio-click su alcuni tipi di file, il loro path venga passato per args[0] (in pratica ho fatto una associazione tra il mio programma e le estensioni).

    Il codice che mi hai proposto effettivamente mi porta al path giusto. Però ho notato che avviando l'applicazione fuori da eclipse, ottengo questo errore.
    j.jpg

    le riga incrimanata, ovvero la 1257 è quella che contiene
    codice:
    File fileJar = new File(urlJar.toURI());

  4. #4
    Dopo
    codice:
     URL urlJar = UnaTuaClasse.class.getProtectionDomain().getCodeSource().getLocation();
    ho piazzato System.out.println(urlJar.toString()); cercando di capire qualcosa dell'errore, e viene restituito in console la stringa "rsrc:./".

    Sai dirmi come uscire da questo problema?

  5. #5
    potete chiudere.
    ho risolto facendo
    codice:
    String urlJar = System.getProperty( "java.class.path" );
    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.