2012-06-21 9 views
5

Ich baue eine Java-Desktop-Anwendung und benötigen einige lokale Daten (Vorlieben und Geschichte) zu speichern. Dazu würde Ich mag einen neuen Ordner in der entsprechenden Stelle zu schaffen, wie AppData \ myapp in Windows und ~/.myapp in Linux (und wo auch immer auf einem Mac zu erwarten ist).Erstellen einer lokalen Speicherverzeichnis in Java-Desktop-App

Was ist die schöne, plattformübergreifende Art und Weise, das zu tun?


ich einige Fragen auf dieser Seite gesehen haben, die danach fragen, aber entweder:

  • Der Fragesteller hat Windows-Anwendungsdaten (nicht Cross-Plattform)
  • finden will Die Lösung ist, einen Ordner in user.home zu erstellen (Linux-Stil, nicht plattformübergreifend) Dies ist, was ich derzeit tun, aber ich bin auf der Suche nach einer Verbesserung.

Antwort

0

Verwenden Sie user.home Systemeigenschaft. Wie folgt aus:

String userHomePath = System.getProperty("user.home"); 
File myAwesomeFolder = new File(useHomePath, "myAweSomeApp"); 
myAwesomeFolder.mkdirs(); 
+0

Ich habe getestet, dass auf Windows 7, wo es gibt 'C: \ Benutzer \ John', während ich will wahrscheinlich' C: \ Benutzer \ John \ AppData \ Local' –

+0

@BartvanHeukelom, na ja, das ist, weil es Gibt den 'home'-Ordner zurück, nicht' AppData'. – npe

+0

'user.home' ist ein Ort, der garantiert beschreibbar ist, und ist x-plat. Vielleicht können Sie eine Umgebungsvariable verwenden wo sonst und 'user.home'. –

3

könnten Sie immer die Java Preferences API verwenden, die Informationen pro Benutzer gespeichert werden und Sie müssen sich nicht um die Umsetzung kümmern. Verschiedene Implementierungen sind für verschiedene Plattformen verfügbar, aber das ist Ihnen (dem Client) verborgen.

Eine Alternative ist die Apache Commons Configuration API zu verwenden, die komplexer ist, sondern gibt Ihnen viel mehr Funktionen.

+0

Das könnte ein guter Ort für Vorlieben sein, wie er sagt, aber Geschichtsdaten sollten wahrscheinlich nicht da sein. – maba

+0

Tatsächlich scheint es nicht vollständig zu passen, aber dennoch interessant. Ich kannte diese API nicht. –

+0

Ich denke, die Frage nach der Geschichte kann davon abhängen, wie * viel * Geschichte. Beide APIs haben die Fähigkeit, aber vielleicht sind einige Lasttests in Ordnung. –

-1

nicht über Linux bestätigt, aber Sie können auch auf Windows-Registry machen Eintrag.

oder so,

String path = System.getProperty("user.home")+ "\\AppLication Data"+"\\xyzFolder"; 

dies für beide Fenster 7 funktioniert, weil% AppData% zeigt den Weg für über das Vermächtnis.

+0

Dies ist alles andere als plattformübergreifend. –

1
import java.io.File; 

public class AppPathFolder { 

    public static void main(String[] args) { 
     String path = null; 
     String osName = System.getProperty("os.name").toLowerCase(); 
     if (osName.indexOf("windows")>-1) { 
      path = System.getenv("APPDATA"); 
     } else if (osName.indexOf("mac")>-1) { 
      // get the env. variable for Mac.. 
      path = System.getenv("?"); 
      // etc. for Linux, Unix, Solaris.. 
     } else { //anything else 
      path = System.getProperty("user.home"); 
     } 
     File rootOfPath = new File(path); 
     // create a sub-directory based on package name of main class.. 
     // perhaps prefixed with with java/appdata 
     System.out.println(rootOfPath); 
    } 
} 

Natürlich gibt es andere Möglichkeiten für kleine Datenmengen:

  • Apps. die vertrauenswürdig sind oder keinen Sicherheitsmanager haben, kann die Preferences API
  • Desktop-App verwenden. gestartet mit Java Web Start hat Zugriff auf die JNLP API, die die PersistenceService bietet - sogar für Sand-Box-Anwendungen.
  • Ein Applet kann Cookies speichern.
Verwandte Themen