配置文件位置的Java最佳实践
在UNIX及其派生版本中,应用程序配置文件位于/etc/下,而它们位于Windows和其他系统的其他位置。java背后的理念是“编写一次,到处运行”,理想情况下,应用程序不必关心它所使用的操作系统。但我希望我的应用程序在启动时加载一个配置文件,我需要提供一个路径。现在,我正在加载不同的文件位置,关闭操作系统名称,但这并不是Java的最佳实践。如何协调这一点?当我制作游戏/应用程序时,我只是将资源文件夹放在与应用程序相同的路径中。例如,在代码中,目录将是“res/config.yml”。将名为“res”的资源文件夹放在与jar相同的文件夹中。然后将该文件放入res文件中。因此,应用程序应该获得该文件。在我们的应用程序中,我们在每个操作系统上使用不同的位置进行配置 在Linux上 /etc/applicationname 在窗户上 [使用选定的安装目录]/conf 我们通过系统属性控制应用程序的外观 -Dconf.dir=路径配置文件位置的Java最佳实践,java,unix,Java,Unix,在UNIX及其派生版本中,应用程序配置文件位于/etc/下,而它们位于Windows和其他系统的其他位置。java背后的理念是“编写一次,到处运行”,理想情况下,应用程序不必关心它所使用的操作系统。但我希望我的应用程序在启动时加载一个配置文件,我需要提供一个路径。现在,我正在加载不同的文件位置,关闭操作系统名称,但这并不是Java的最佳实践。如何协调这一点?当我制作游戏/应用程序时,我只是将资源文件夹放在与应用程序相同的路径中。例如,在代码中,目录将是“res/config.yml”。将名为“r
在这种情况下,我不一定认为有正确的答案。我通常将配置文件放在用户主页的目录
(注意前导点),在运行时通过System.getProperty(“user.home”)
读取该目录。这是Linux用户期望的位置,而在Windows上,它感觉有点异国情调(与AppData/Local
或AppData/Roaming
等概要文件目录相比),即使它是跨平台工具的一个非常流行的选择。使用当前用户的home意味着您通常不会在文件系统访问权限方面遇到问题,因此首选使用user.home
而不是自定义属性,因为它是由系统开箱即用提供的(仍然可以重写)
另一种方法是使用安装目录,但您必须使用指向该目录的环境变量,如
$APP\u HOME
,因为在应用程序运行时通常无法推断它(实际上,您可以通过使用主ClassLoader返回的URL来轻松地获得典型的JAR部署的安装目录,但我认为它是一个黑客,认为它不应该被使用)。您的应用程序可以使用<代码> Stask.GETEnv(“AppHOHE”)读取变量。,此变量必须由启动应用程序所提供的平台相关脚本设置。此策略的缺点是当前用户可能没有读/写指定目录的权限。当它应该是可移植的时,我认为将其放在应用程序目录本身没有什么错。Java已经有了一个pr处理操作系统差异的引用API。