2012-06-21 58 views
5

我正在構建Java桌面應用程序並需要存儲一些本地數據(偏好和歷史記錄)。爲此,我想在適當位置創建一個新文件夾,例如Windows中的AppData \ myapp和Linux中(以及Mac上預計的任何位置)的〜/ .myapp在Java桌面應用程序中創建本地存儲目錄

什麼是很好的,跨平臺的方式來做到這一點?


我已經看到了這個網站,問這問幾個問題,但無論是:

  • 提問者想找到Windows的應用程序數據(不是跨平臺)
  • 解決方案是在user.home(Linux風格,不是跨平臺)中創建一個文件夾這是我目前所做的,但我正在尋求改進。

回答

0

使用user.home系統屬性。就像這樣:

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

我測試過在Windows 7上它返回'C:\ User \ John',而我可能想'C:\ Users \ John \ AppData \ Local' –

+0

@BartvanHeukelom,那是因爲它返回你的'home'文件夾,而不是'AppData'。 – npe

+0

'user.home'是一個保證可寫的地方,並且是x-plat。也許你可以在已知的地方使用環境變量,否則可以使用'user.home'。 –

3

你總是可以使用Java Preferences API將存儲每個用戶的信息,你不必擔心執行。不同的實現可用於不同的平臺,但對您(客戶端)隱藏。

另一種方法是使用Apache Commons Configuration API,它比較複雜,但會爲您提供更多功能。

+0

這可能是偏好的好地方,但他的歷史數據可能不應該在那裏。 – maba

+0

事實上,它似乎並不完全適合,但仍然有趣。我不知道這個API。 –

+0

我想歷史問題可能取決於*多*歷史。這兩種API都具備這種能力,但也許有些負載測試的順序是 –

-1

未經過Linux確認,但您也可以進入Windows註冊表。

無論哪種方式,

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

這既適用於Windows 7的,因爲%APPDATA%顯示了傳統上面的路徑。

+0

這只是跨平臺的。 –

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

當然,還有其他的選擇對於少量的數據:

  • 應用。信任的或沒有安全管理器的人可能使用桌面應用程序Preferences API
  • 桌面應用程序。使用Java Web Start啓動可以訪問JNLP API,它提供了PersistenceService - 即使是沙盒應用程序也可以使用。
  • 一個applet可以存儲cookie。
相關問題