6

我正在构建一个 Java 桌面应用程序,需要存储一些本地数据(首选项和历史记录)。为此,我想在适当的位置创建一个新文件夹,例如Windows 中的AppData\myapp和 Linux 中的~/.myapp(以及 Mac 上预期的任何位置)。

什么是好的,跨平台的方式来做到这一点?


我在这个网站上看到了几个关于这个问题的问题,但是:

  • 提问者想要查找 Windows 的应用程序数据(不是跨平台的)
  • 解决方案是创建一个文件夹user.home(Linux 风格,而不是跨平台)这是我目前所做的,但我正在寻找改进。
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,该 APIPersistenceService甚至可用于沙盒应用程序。
  • 小程序可以存储 cookie。
于 2012-06-21T15:09:41.143 回答
0

将应用程序文件夹存储到用户主目录中怎么样?您可以通过 System.getProperty("user.home") 获取它,请参阅http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

于 2012-06-21T13:53:01.980 回答
0

使用user.home系统属性。像这样:

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

尚未确认 Linux,但您也可以进入 Windows 注册表。

无论哪种方式,

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

这适用于 Windows 7,因为 %appData% 显示了上面遗留的路径。

于 2012-06-21T13:51:26.850 回答