【问题标题】:Good locations for config file? (shared between users, common per machine)配置文件的好位置? (用户之间共享,每台机器通用)
【发布时间】:2014-01-21 09:12:48
【问题描述】:

我目前正在用 java 为 windows 编写一个替换 shell,我的应用程序当前正在使用

创建一个配置文件
File userSettings = new File("Gyroscope.properties");

但是,当由 windows 运行时,当前目录设置为C:\windows\System32\,并且程序没有对该目录的写入权限。

要写入配置文件的更好位置是什么?最好将它相对于 jar 文件,但是我不知道这样做的好方法,并且其他堆栈溢出问题对这个确切的问题有不干净的解决方案,所以我正在寻找其他位置作为选项。

配置是特定于机器的,应该对所有用户通用。

【问题讨论】:

  • 用户的主目录呢?
  • 如果您希望它相对于 jar,您是否尝试从代码中获取当前工作目录,然后创建相对于该路径的文件?
  • 是的,这就是我首先遇到的问题,当前目录一旦作为 shell 运行就会更改为系统根目录。
  • @tobias_k 用户主目录的问题是我的用例是机器相关的,而不是用户相关的,所以为每个用户定制它是有害的,而不是有用的。

标签: java windows windows-shell


【解决方案1】:

使用Preferences 类,它将确保将设置写入允许的位置(例如用户的主目录或注册表)。

【讨论】:

  • 使用 Preferences 类,配置选项到底在哪里结束?我需要能够记录它的位置,但是这样做的好处是它可以让我选择不依赖于用户,将它存储在用户主目录中是不允许我这样做的。
  • 取决于平台。在 Unix 上,它会保存到 ~/.java_profile/
【解决方案2】:

我将描述一个可能的解决方案。应该有几种方法可以实现。

将配置文件放在 jar 旁边。在调用 java 时将配置文件显式放入类路径中(例如 java -cp .../Gyroscope.jar;.../Gyroscope.properties <your_main_class>)。

现在您可以将您的属性文件作为资源 (ClassLoader.getSystemResourceAsStream("/Gyroscope.properties") 访问。使用您想要的任何类加载器,只要它方便并适合您的实际实现。一旦您有了输入流,您可以像往常一样将属性加载到 Properties 对象中。

希望这会有所帮助。

【讨论】:

  • 这会有所帮助,但它会将问题转移到有关如何正确设置类路径以供人们遵循的正确文档上。
  • 确实,您必须记录和/或提供启动器外壳脚本(.sh、.bat、...)。顺便说一句,无论选择哪种解决方案,您都必须将其记录下来。 ;-)
  • 我不介意使用 shell 脚本来启动它,但是它会打开一个命令提示符窗口,其中包含所有调试信息。
  • 你打算如何生成你的 jvm?
  • 使用组策略对象将其作为 shell 运行,这与使用系统机房的当前目录从 CommandPrompt 运行它最相似,例如C:\windows\system32\ 但是我开始相信某种 java 启动器可能更合适,但这只是将问题推给启动器。
猜你喜欢
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 2016-06-15
  • 2023-03-08
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
相关资源
最近更新 更多