3

在创建至少应在 Windows、Linux、Mac OS 和 Android 上部署的 Java 解决方案时,我们正在寻找一种方法来保留系统范围的配置数据。

Java 中存储应用程序配置数据的正确方法是什么? 解决方案围绕特定用户的主目录进行讨论。在 Oracle 的文档页面之一上:

http://docs.oracle.com/javase/7/docs/technotes/guides/deployment/deployment-guide/properties.html

采取了类似的方法。

我们想走一条更广泛的系统路线。例如,在 linux 系统上,/etc 或 /var/lib 的子目录可能是一个合适的位置。在 Windows 上 /$WIN/System32 可能是开始,在 Mac OS 上 /System/Library 可能是位置。

JAVA_HOME - 可能是一个选项,但有它自己的问题: Windows 忽略 JAVA_HOME:如何将 JDK 设置为默认值?

java.util.Preference 类已经存在了一段时间,但 id 没有提供适当的 BackingStore 位置选择: http ://www.allaboutbalance.com/articles/disableprefs/

什么是允许

  • 找出正确的系统范围目录
  • 添加应用程序特定的子文件夹
  • 并且可以处理属性(这可以使用常规属性文件或 java.util.Preferences 来完成)

问题的第一部分是关于平台独立方法中的正确位置。应该使用哪些目录,例如在 Android 上?以及必须处理哪些后续问题(例如访问权限)?假设是,如果存在图书馆,则问题的第一部分将通过图书馆处理这部分问题的方式来回答。因此,如果您认为没有这样的库,请您回答这部分问题。

4

1 回答 1

0

方法: http ://www.java-tutorial.ch/core-java-tutorial/java-osname-system-property 是迄今为止我能找到的最接近的方法:

String osName = System.getProperty("osName", null);
OperatingSystem  operatingSystem = OperatingSystem.resolve(osName);
OperatingSystemFamily family = operatingSystem.getFamily();
switch (family) {
  case UNIX:
    setBinFolder(DEFAULT_UNIX_BIN);
    setConfFolder(DEFAULT_UNIX_CONF);
    setDataFolder(DEFAULT_UNIX_DATA);
  break;
  case WINDOWS:
    setBinFolder(DEFAULT_WINDOWS_BIN);
    setConfFolder(DEFAULT_WINDOWS_CONF);
    setDataFolder(DEFAULT_WINDOWS_DATA);
  break;
  case MACOS:
    setBinFolder(DEFAULT_MACOS_BIN);
    setConfFolder(DEFAULT_MACOS_CONF);
    setDataFolder(DEFAULT_MACOS_DATA);
   break;
  default:
    setBinFolder(USER_HOME+"/bin");
    setConfFolder(USER_HOME+"/conf");
    setDataFolder(USER_HOME+"/data");                   
  break;
}

但它只解决了识别操作系统并做出相应反应的部分问题。随意在此基础上回答问题。

于 2013-04-23T06:07:04.090 回答