放置位置以及如何获得系统范围配置数据的正确位置,例如system_home是一种独立于平台的Java方式吗?

时间:2013-04-20 13:29:19

标签: java properties cross-platform

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

What is the proper way to store app's conf data in 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 ignores JAVA_HOME: how to set JDK as default?

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

什么是允许

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

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

1 个答案:

答案 0 :(得分: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;
}

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