在UNIX及其衍生系统中,应用程序配置文件存储在/etc/目录下,而在Windows和其他系统上它们存储在其他位置。Java的哲学是“一次编写,到处运行”,理想情况下,应用程序不应该关心它在什么操作系统上运行。但我希望我的应用程序可以在启动时加载一个配置文件,并且我需要提供一个路径。目前,我正在根据操作系统名称切换不同的文件位置进行加载,但这似乎不是Java的最佳实践。如何解决这个问题?
.<appName>
(注意前面的点)的文件夹中,这个文件夹可以通过System.getProperty("user.home")
方法在运行时读取。对于Linux用户来说,这是预期的位置,而在Windows上,它可能会感觉有些奇异(与像AppData/Local
或AppData/Roaming
这样的配置文件目录相比),即使这是跨平台工具的极其流行的选择。使用当前用户的主目录意味着您通常不会遇到文件系统访问权限问题,并且使用user.home
比使用自定义属性更加优选,因为它由系统提供(但仍然可以被覆盖)。$APP_HOME
,因为通常无法在应用程序运行时推断出它(实际上,通过操作主ClassLoader返回的URL轻松获取典型JAR部署的安装目录,但我认为这是一种破解,不应使用)。您的应用程序可以使用System.getenv("APP_HOME")
读取该变量,并且此变量必须由您提供的特定于平台的脚本设置以启动应用程序。这种策略的缺点是当前用户可能没有读/写命名目录的权限。-Dconf.dir=path
我并不认为在这种情况下有一个正确的答案。