Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
配置文件位置的Java最佳实践_Java_Unix - Fatal编程技术网

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

配置文件位置的Java最佳实践,java,unix,Java,Unix,在UNIX及其派生版本中,应用程序配置文件位于/etc/下,而它们位于Windows和其他系统的其他位置。java背后的理念是“编写一次,到处运行”,理想情况下,应用程序不必关心它所使用的操作系统。但我希望我的应用程序在启动时加载一个配置文件,我需要提供一个路径。现在,我正在加载不同的文件位置,关闭操作系统名称,但这并不是Java的最佳实践。如何协调这一点?当我制作游戏/应用程序时,我只是将资源文件夹放在与应用程序相同的路径中。例如,在代码中,目录将是“res/config.yml”。将名为“r

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

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

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

在Linux上

/etc/applicationname

在窗户上

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

我们通过系统属性控制应用程序的外观

-Dconf.dir=路径


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

我通常将配置文件放在用户主页的目录
(注意前导点),在运行时通过
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。