java 默认文件夹设置_Java – 设置首选项backingstore目录

在Java应用程序中,开发者尝试将`java.util.prefs.systemRoot`设置为`/usr/share/myfolder`以实现跨平台的持久存储。然而,在Linux上遇到问题,因为系统根偏好节点通常位于`/etc`。文章讨论了如何在Linux中更改系统根偏好目录,以及遇到的权限和配置问题,包括需要创建`.systemPrefs`子目录并确保正确权限。解决方案包括使用VM参数设置用户和系统偏好根目录。
摘要由CSDN通过智能技术生成

我需要在我的Java应用程序中创build一个持久存储,以便所有用户都可以访问它。 所以我正在研究java.util.prefs.Preferences和使用systemRoot()在我的Windows上工作正常,保存在registry的数据。 但是我真的在Linux(Ubuntu)上面临一些问题。 我想使用其他应用程序已经使用的目录:/ usr / share /。 所以,我试图在运行时将systemRoot默认目录redirect到/ usr / share。 这是我的代码:

System.setProperty("java -Djava.util.prefs.systemRoot", "/usr/share/myfolder"); Preferences pref = Preferences.systemRoot().node("/usr/share/myfolder");

根据这个网站 ,我必须在执行这个命令行之前创build.systemPrefs文件夹,并且它隐含地说systemRoot()将会使用它。

当我执行我的程序,我得到以下警告: java.util.prefs.FileSystemPreferences syncWorld WARNING Couldn't flush system prefs: java.util.prefs.BackingStoreException: /etc/.java/.systemPrefs/usr create failed.

所以我假设System.setProperty不工作。 任何build议? 提前致谢!

在Linux系统中, 系统根偏好节点将位于/etc 。 这是由于历史原因造成的,并且是由Linux标准库规定的标准。 任何非系统偏好都可以在其他位置进行,但是将系统偏好放在其他地方违反了操作系统的设计。

在Linux系统中,你的定义是无效的,因为它不能在/ etc开始。 显然,Java代码中的某些东西会根据您决定重新设置首选项根目录的操作系统规范。

通常情况下,这些文件不受世界(或甚至大多数用户)可写入的影响而不受修改。 这意味着对于用户有权访问首选项,他们应该去

Preferences.userRoot()

这将把他们放置在他们的主目录(他们将有修改权限)的隐藏目录。

如果你希望任何用户读取其他用户的喜好(说明听起来像你可能),那么你将需要有一个安装程序作为一个足够的授权用户(通常是root)运行,使/etc下所需的目录,并更改它的权限成为世界可写的。

通常情况下,/ etc下的文件不是世界可写的,因为用户可以改变其他用户的设置,并且考虑到用户预期环境的安全违规类型。 例如,粗心的员工(或者不满意的员工)可能会一举消灭所有其他用户的偏好。

比马莱什建议,而不是

System.setProperty("java -Djava.util.prefs.systemRoot", "/usr/share/myfolder") ,你说

System.setProperty("-Djava.util.prefs.systemRoot", "/usr/share/myfolder") 。

但是你试图设置的属性的名字是java.util.prefs.systemRoot ,而不是-Djava.util.prefs.systemRoot ,所以你应该做的

System.setProperty("java.util.prefs.systemRoot", "/usr/share/myfolder");

如果这不起作用,请尝试将“-D”开关添加到启动程序的命令行。 这是java -D...应该去的地方。 该命令将开始

java -Djava.util.prefs.systemRoot=/usr/share/myfolder

这是在基于* nix的服务器上运行的一个令人讨厌的问题。

我能够通过使用以下vm参数来解决它:

-Djava.util.prefs.userRoot=/opt/apache-tomcat-7.0.50/uprefs -Djava.util.prefs.systemRoot=/opt/apache-tomcat-7.0.50/sprefs

但是, systemRoot一个重要注意事项是在其中创建一个名为.systemPrefs的子文件夹,否则它将无法工作。

另外,不要忘记将这些目录chown -R到运行java应用程序的用户(在我的例子中是tomcat)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值