Domanda

Voglio creare un file ini per memorizzare alcune impostazioni per la mia applicazione. È una buona idea trovare dove si trova il file jar e creare lì un file ini? Se sì, come posso trovare la posizione del file jar?

Ma se conosci una soluzione migliore per qualcosa del genere, vorrei ascoltarne alcuni.

MODIFICA : sto usando mac e voglio eseguire la stessa applicazione in Windows. Potrei scrivere qualcosa nella directory System.getProperty (" user.home "), ma voglio mantenere pulito il sistema, se l'utente decide di rimuovere l'app. Non esiste un modo migliore per archiviare il file delle impostazioni, ad esempio nella stessa directory con l'applicazione?

È stato utile?

Soluzione

È possibile individuare la directory dell'applicazione utilizzando ClassLoader. Vedi: Java: trovare la directory dell'applicazione . Invece di un file .INI , utilizza un file .properties : puoi caricarlo e salvarlo tramite Proprietà classe.

Come altri hanno notato, non è necessario scrivere le impostazioni utente nella directory dell'applicazione. Cosa succede se l'utente non ha accesso in scrittura alla directory dell'applicazione? Cosa succede se l'applicazione viene utilizzata da più utenti sullo stesso sistema contemporaneamente? Nessuna di queste situazioni è insolita, nemmeno su Windows.

Potresti comunque voler caricare alcune impostazioni dalla directory dell'applicazione - forse l'amministratore ha configurato lì le impostazioni predefinite.

Una convenzione comune è quella di salvare le impostazioni dell'utente nella home directory dell'utente:

/home/user/.eclipse
C:\Documents and Settings\User\.eclipse

Anche se questo significa che potresti lasciare indietro i file randagi, questo può essere utile se l'utente reinstalla l'app. Documentare tali cose in un README. Ecco come creare e ottenere un riferimento alla directory:

public static File getSettingsDirectory() {
    String userHome = System.getProperty("user.home");
    if(userHome == null) {
        throw new IllegalStateException("user.home==null");
    }
    File home = new File(userHome);
    File settingsDirectory = new File(home, ".myappdir");
    if(!settingsDirectory.exists()) {
        if(!settingsDirectory.mkdir()) {
            throw new IllegalStateException(settingsDirectory.toString());
        }
    }
    return settingsDirectory;
}

Su sistemi operativi unix-like, l'avvio del nome della directory con un punto (" .myappdir ") renderà nascosta la directory. Su Windows, si troverà sotto Documenti , quindi gli utenti non vedranno la directory a meno che non vadano a cercarla.

Altri suggerimenti

Se le impostazioni sono scritte solo dall'applicazione (anziché modificate manualmente), prendere in considerazione l'utilizzo di API Preferenze .

Non dovresti archiviare i file temporanei nella directory di installazione di un'applicazione. Ricordare che l'utente che esegue l'applicazione potrebbe non avere accesso in scrittura a quella directory. Il posto più sicuro dove mettere cose del genere si trova nella cartella C: \ Documents and Settings \ nomeutente \ Dati applicazioni \ NomeApplicativo (modificando il nome secondo necessità).

Detto questo, comunque, probabilmente memorizzerei quel tipo di cose nel registro invece di un file sul loro computer. (Ma sono solo io.)

In genere i programmatori Java non usano file .ini, ma file .properties (formato diverso). Puoi usare la classe java.lang.Properties come un buon wrapper programmatico se lo fai.

Mentre puoi ottenere la posizione del tuo file jar chiamando getProtectionDomain (). getCodeSource (). getLocation () sul membro .class della tua classe, io non ti consiglio di farlo.

Vorrei invece scrivere il file nella directory System.getProperty (" user.home ") - la directory home degli utenti, o se è veramente temporanea, System.getProperty (" java.io.tmpdir ")

Dipende se il tuo ini deve essere leggibile / scrivibile dall'uomo in circostanze normali. In caso contrario, puoi utilizzare un file delle proprietà anziché un file ini e archiviarlo nell'utente " utente " directory.

Per quanto riguarda la ricerca del file jar, dovresti trovare ClassLoader per una classe nota per essere caricata dal jar, verificare che fosse il tipo appropriato di ClassLoader (ovvero che è davvero stato caricato da un barattolo) e puoi estrarne il percorso. Posso probabilmente scavare il codice per farlo se è davvero quello che vuoi. Non lo consiglierei necessariamente.

MODIFICA La proprietà user.home ti darà la directory utente, che puoi usare in sicurezza.

L'idea con il file .properties invece del file INI è buona. Inoltre, se memorizzi alcuni dati sensibili, puoi prendere in considerazione la crittografia. Dai un'occhiata:

https://www.owasp.org/index.php/How_to_encrypt_a_properties_file

o questo:

crittografa e decodifica il valore del file delle proprietà in java

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top