配置文件位置的Java最佳实践

时间:2014-06-12 18:42:26

标签: java unix

在UNIX及其衍生产品中,应用程序配置文件位于/ etc /下,而它们位于Windows和其他系统的其他位置。 java背后的哲学是“一次编写,随处运行”,理想情况下应用程序不应该关心它的操作系统。但我希望我的应用程序在启动时加载配置文件,我需要提供一个路径。现在,我正在加载关闭操作系统名称的不同文件位置,但这并不像是Java的最佳实践。我如何协调这个?

3 个答案:

答案 0 :(得分:1)

当我制作游戏/应用程序时,我只是将一个资源文件夹放在与应用程序相同的路径中。例如,在代码中,目录将是“res / config.yml”。在与jar相同的文件夹中,放置名为“res”的资源文件夹。然后将文件放在res文件中。所以应用程序应该获取该文件。

答案 1 :(得分:0)

在我们的应用程序中,我们在每个操作系统上使用不同的位置进行配置。

在Linux上

  

的/ etc /的applicationName

在Windows上

  

[使用选定的安装目录] / conf

我们通过系统属性

控制应用程序的外观
  

-Dconf.dir =路径

在这种情况下,我不一定认为答案是正确的。

答案 2 :(得分:0)

我通常将配置文件放在用户主目录中的.<appName>目录中(注意前导点),该目录在运行时通过System.getProperty("user.home")读取。这是Linux用户的预期位置,而在Windows上,它感觉有点奇特(与AppData/LocalAppData/Roaming等配置文件目录相比),即使它是跨平台的极受欢迎的选择工具。使用当前用户的家意味着您通常不会遇到文件系统访问权限的问题,并且首选使用user.home而不是自定义属性,因为它提供了开箱即用的功能。系统(仍然可以覆盖)

另一种方法是使用安装目录,但是你必须使用指向它的环境变量,例如$APP_HOME,因为在应用程序运行时通常无法推断它(实际上你通过播放主ClassLoader返回的URL,可以非常轻松地获取安装目录,但我觉得它不应该被使用)。您的应用程序可以使用System.getenv("APP_HOME")读取变量,并且此变量必须由您提供的用于启动应用程序的平台相关脚本设置。此策略的缺点是当前用户可能无权读取/写入指定目录。