2012-10-26 17 views
8

Sto cercando un modo semplice e multipiattaforma sulla JVM per ottenere le directory appropriate per la memorizzazione delle impostazioni dell'applicazione e dei dati della cache. Per esempio, su Linux sotto le specifiche XDG:Semplice, multipiattaforma per ottenere percorsi desktop ben noti in Java?

  • config in ~/.config/appname
  • cache in ~/.cache/appname

roba di Windows va in C\Users\user\Application Data o qualcosa del genere (su Win 7); Ho capito che Mac mette roba sotto ~/Library/Application Settings.

C'è una chiamata multipiattaforma per ottenere questi percorsi percorso? Non sono stato in grado di trovarne uno, anche se trovo diverse domande a riguardo. C'è qualche libreria che ha implementato la logica corretta per le piattaforme desktop più comuni?

caso peggiore, posso solo guardare in alto user.home e fingere che tutto è un ambiente Linux XDG-based. Ma se è facile ottenere le directory giuste per il sistema operativo dell'utente, mi piacerebbe farlo.

risposta

2

La classe FileSystemView è l'unica che conosco che contenga l'accesso ad alcune directory generali come questa ed è multipiattaforma. Fare riferimento alla documentazione here

Questa classe contiene alcuni metodi che potrebbero essere utili, ad esempio getHomeDirectory() e getDefaultDirectory(). Questa classe è utilizzata dallo JFileChooser per le interfacce Swing. So che non punta direttamente alle directory config e cache, ma potrebbe essere un passo nella giusta direzione per te.

Per le mie app, prendo il migliore approccio cercando di rendere tutte le configurazioni e le impostazioni contenute all'interno dell'applicazione stessa, ad es. creare una directory "config" nella directory in cui è installata l'applicazione. Anche se non è una posizione centrale per la configurazione dell'intero sistema operativo, almeno lo mantiene all'interno del contesto dell'applicazione java.

2

Fondamentalmente abbiamo impostato una classe di utilità che fornisce queste informazioni, per lo più basate sulla proprietà di sistema user.home e os.name.

Abbiamo una serie di metodi che ci permettono di costruire una posizione di percorso, qualcosa di simile ...

SystemUtilities.getApplicationSettingsPath("Name of my awesome app"); 
Problemi correlati