我需要在我的 Java 应用程序中创建一个持久存储,以便所有用户都可以访问它。所以我正在研究 java.util.prefs.Preferences
并使用 systemRoot()
在 Windows 上对我来说很好,在 Register 保存数据。
但我确实在 Linux (Ubuntu) 上遇到了一些问题。我想使用我们的其他应用程序已经使用的目录:/usr/share/。
因此,我试图在运行时将 systemRoot
默认目录重定向到/usr/share。这是我的代码:
System.setProperty("java -Djava.util.prefs.systemRoot", "/usr/share/myfolder");
Preferences pref = Preferences.systemRoot().node("/usr/share/myfolder");
根据这个site ,我必须在执行此命令行之前创建 .systemPrefs
文件夹,它暗示 systemRoot()
将使用它。
当我执行我的程序时,我收到以下警告:
java.util.prefs.FileSystemPreferences syncWorld
警告无法刷新系统首选项:java.util.prefs.BackingStoreException:/etc/.java/.systemPrefs/usr 创建失败。
所以我假设 System.setProperty
不工作。有什么建议吗?
提前致谢!
最佳答案
这是一个非常讨厌的问题,Java 在基于 *nix 的服务器上运行。
我能够通过使用以下 vm args 来解决它:
-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)。
关于Java - 设置首选项后备存储目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004954/