2012-06-21 9 views
5

Buduję aplikację Java na komputer i muszę przechowywać pewne lokalne dane (preferencje i historię). W tym celu chciałbym utworzyć nowy folder w odpowiedniej lokalizacji, np. AppData \ myapp w systemie Windows i ~/.myapp w systemie Linux (i wszędzie tam, gdzie jest to oczekiwane na komputerze Mac).Tworzenie lokalnego katalogu przechowywania w aplikacji komputerowej Java

Co to jest miły, międzyplatformowy sposób, aby to zrobić?


Widziałem kilka pytań dotyczących tej witryny, które proszą o to, ale albo:

  • Pytający chce znaleźć oknami Dane aplikacji (nie cross-platform)
  • Rozwiązaniem jest utworzenie folderu w stylu user.home (styl linuxowy, a nie między platformami). Właśnie to robię, ale szukam ulepszenia.

Odpowiedz

0

Użyj właściwości systemowej user.home. Tak:

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

Przetestowałem to na Windows 7, gdzie zwraca 'C: \ User \ John', natomiast pewnie chcą' C: \ Users \ Jan \ AppData \ Local' –

+0

@BartvanHeukelom, dobrze, że to dlatego, że zwraca twój folder 'home', a nie' AppData'. – npe

+0

'user.home' to miejsce gwarantujące możliwość zapisu i jest to x-plat. Być może w przeciwnym razie możesz użyć zmiennej środowiskowej, która jest znana i 'user.home'. –

3

Zawsze możesz użyć Java Preferences API która będzie przechowywać informacje dla każdego użytkownika i nie trzeba się martwić o jego realizacji. Różne implementacje są dostępne dla różnych platform, ale to ukryte przed Tobą (klientem).

Alternatywą jest użycie interfejsu API Apache Commons Configuration, który jest bardziej złożony, ale oferuje znacznie więcej funkcji.

+0

To może być dobre miejsce na preferencje, jak mówi, ale dane historyczne prawdopodobnie nie powinny tam być. – maba

+0

Rzeczywiście nie wydaje się, aby pasował całkowicie, ale mimo to interesujący. Nie wiedziałem o tym API. –

+0

Chyba pytanie dotyczące historii może zależeć od tego, jak * wiele * historii. Oba interfejsy API będą miały taką możliwość, ale być może niektóre testy obciążenia są w porządku. –

-1

Nie potwierdzono w systemie Linux, ale można również wprowadzić wpis do rejestru systemu Windows.

czy inaczej,

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

ten działa zarówno dla Windows 7, ponieważ% appdata% pokazuje ścieżkę, która Legacy powyżej.

+0

To nie jest platforma. –

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); 
    } 
} 

Oczywiście, istnieją inne opcje dla małych ilości danych:

  • Apps. które są zaufane lub żaden menedżer bezpieczeństwa nie może używać aplikacji komputerowej A-. uruchomione przy użyciu Java Web Start ma dostęp do JNLP API, który oferuje PersistenceService - dostępny nawet do aplikacji w piaskownicy.
  • Aplet może przechowywać pliki cookie.
Powiązane problemy