6

I'm building a Java desktop application and need to store some local data (preferences and history). For this I'd like to create a new folder in the appropriate location, like AppData\myapp in Windows and ~/.myapp in Linux (and wherever is expected on a Mac).

What is the nice, cross-platform way to do that?


I've seen several questions on this site that ask about this, but either:

  • The asker wants to find Windows' Application Data (not cross-platform)
  • The solution is to create a folder in user.home (Linux style, not cross-platform) This is what I currently do, but I'm looking for an improvement.
4

5 に答える 5

4

ユーザーごとに情報を保存するJava Preferences APIをいつでも使用でき、実装について心配する必要はありません。さまざまなプラットフォームでさまざまな実装が利用可能ですが、それはあなた (クライアント) には隠されています。

別の方法として、より複雑ですが、より多くの機能を提供するApache Commons Configuration APIを使用することもできます。

于 2012-06-21T13:50:34.277 に答える
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);
    }
}

もちろん、少量のデータには他にもオプションがあります。

  • アプリ。信頼されているか、セキュリティ マネージャを持たないアプリケーションは、PreferencesAPIを使用する可能性があります
  • デスクトップ アプリ。Java Web Startを使用して起動されたアプリケーションは、JNLP API にアクセスできPersistenceServiceます。これにより、サンドボックス化されたアプリでも利用できます。
  • アプレットは Cookie を保存できます。
于 2012-06-21T15:09:41.143 に答える
0

user.homeシステム プロパティを使用します。このような:

String userHomePath = System.getProperty("user.home");
File myAwesomeFolder = new File(useHomePath, "myAweSomeApp");
myAwesomeFolder.mkdirs();
于 2012-06-21T13:47:24.623 に答える
0

app-folder をユーザーのホーム ディレクトリに保存するのはどうですか? System.getProperty("user.home") ごとに取得できます。http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.htmlを参照してください。

于 2012-06-21T13:53:01.980 に答える
-1

Linux については確認されていませんが、Windows レジストリへのエントリも作成できます。

どちらにしても、

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

%appData% は上記の従来のパスを示しているため、これは Windows 7 と Windows 7 の両方で機能します。

于 2012-06-21T13:51:26.850 に答える