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

5
在UNIX及其衍生系统中,应用程序配置文件存储在/etc/目录下,而在Windows和其他系统上它们存储在其他位置。Java的哲学是“一次编写,到处运行”,理想情况下,应用程序不应该关心它在什么操作系统上运行。但我希望我的应用程序可以在启动时加载一个配置文件,并且我需要提供一个路径。目前,我正在根据操作系统名称切换不同的文件位置进行加载,但这似乎不是Java的最佳实践。如何解决这个问题?

1
当它需要可移植性时,我认为将其放在应用程序目录本身中并没有什么问题。 - user432
Java已经有一个偏好API来处理操作系统的差异。http://docs.oracle.com/javase/7/docs/api/java/util/prefs/Preferences.html - Dave Newton
3个回答

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

1
我通常将配置文件放在用户主目录下的一个名为.<appName>(注意前面的点)的文件夹中,这个文件夹可以通过System.getProperty("user.home")方法在运行时读取。对于Linux用户来说,这是预期的位置,而在Windows上,它可能会感觉有些奇异(与像AppData/LocalAppData/Roaming这样的配置文件目录相比),即使这是跨平台工具的极其流行的选择。使用当前用户的主目录意味着您通常不会遇到文件系统访问权限问题,并且使用user.home比使用自定义属性更加优选,因为它由系统提供(但仍然可以被覆盖)。
另一种方法是使用安装目录,但是您需要使用指向该目录的环境变量,例如$APP_HOME,因为通常无法在应用程序运行时推断出它(实际上,通过操作主ClassLoader返回的URL轻松获取典型JAR部署的安装目录,但我认为这是一种破解,不应使用)。您的应用程序可以使用System.getenv("APP_HOME")读取该变量,并且此变量必须由您提供的特定于平台的脚本设置以启动应用程序。这种策略的缺点是当前用户可能没有读/写命名目录的权限。

0
在我们的应用程序中,每个操作系统都使用不同的位置进行配置。
在Linux上:
/etc/applicationname 在Windows上:
[Use Selected Install Dir]/conf
我们通过系统属性控制应用程序查找的位置。

-Dconf.dir=path

我并不认为在这种情况下有一个正确的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接