首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中存储app的conf数据的正确方式是什么?

在Java中存储app的conf数据的正确方式是什么?
EN

Stack Overflow用户
提问于 2008-10-11 17:29:39
回答 5查看 8.8K关注 0票数 16

您在哪里存储特定于用户和特定于计算机的J2SE应用程序的运行时配置数据?

(例如,Windows上的C:\Users\用户名\AppData\Roaming和Unix上的/home/username )

如何以独立于平台的方式在文件系统中获取这些位置?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-11 17:44:10

这取决于您的J2SE应用程序类型:

主目录可执行JAR文件(非常简单):使用user.home System property查找

  • -J2SE。然后创建一个相应的子目录(比如PGP,SVN,...do)
  • Java Web Start为保护属性提供了非常好的包含方法。Always user-specific
  • Finally Eclipse RCP:对于用户,您有工作区的概念(也是从user.home派生的),对于computer wide usage

,您有配置(不完全确定如何在Vista中访问这些棘手的内容

所有这些方法在谨慎使用时都是操作系统中立的--使用正确的separatorChar

票数 14
EN

Stack Overflow用户

发布于 2008-10-11 19:33:52

首先是格式:

  1. Java property files很适合于键/值对(也可以自动处理换行符)。通过使用“点符号”,可以实现一定程度的结构。缺点是该结构不允许您轻松地枚举顶级配置实体并以向下钻取的方式工作。最适合用于一小部分特定于环境的设置--通常用于各种
  2. 框架(特别是J2EE和

)的更复杂的配置。我建议你至少了解一下Spring -即使你决定不使用它,它也包含了许多值得了解的想法。如果您决定使用自己的XML配置,我建议您使用带有定制序列化选项的XStream,或者如果您只需要解析一些XML,那么可以看看XOM。顺便说一句,Spring还允许插入定制的XML配置语言,但它是一个relatively complex task。XML配置最适合用于更复杂的“内部”配置,这些配置不会被end user.

  1. Serialized Java对象看到或调整--这是一种保持对象状态并在以后恢复它的快速而简单的方法。如果您编写了一个配置GUI,并且您并不关心配置是否为人类可读的,那么它将非常有用。当你发展classes.
  2. Preferences时,要当心compatibility issues - Java 1.4中引入的,允许你在特定于平台的存储中存储类型文本、数字、字节数组和其他原语。在Windows上,这是注册表(您可以在HKLM或HKCU下的/Software/JavaSoft/Prefs之间进行选择)。在Unix下,同样的应用程序接口在用户主页或/etc下创建文件。每个首选项配置文件都可以导出和导入为XML文件。您可以通过将"java.util.prefs.PreferencesFactory“JVM属性设置为实现类名称来指定PreferencesFactory接口的自定义实现。

一般来说,根据您的应用程序场景,使用prefs API可能是好事,也可能是坏事。

  1. 如果您计划在具有不同配置的同一台计算机上运行同一代码的多个版本,则使用首选项应用编程接口不是一个好主意。
  2. 如果您计划在受限环境(Windows域或严格管理的Unix计算机)中使用应用程序,则需要确保您具有对必要的注册表项/目录的正确访问权限。这不止一次让我大吃一惊。当不止一台活动机器被involved.
  3. Preferences时,
  4. 要注意漫游配置文件(复制的主目录),它们弥补了一些有趣的场景,并不像应用程序目录下的配置文件那么明显。大多数台式机支持人员都不希望也不喜欢它们。

关于prefs的文件布局,它再次取决于您的应用程序。一个通用的建议是:

  1. 将大多数XML文件打包到应用程序的JAR中,位于根目录或/META-INF目录下。这些文件将是只读的,并且被认为是$APP_HOME/ application.
  2. Put下用户可修改配置的私有文件。它应该主要由属性文件组成,偶尔也包括一个简单的XML文件(XStream序列化)。这些文件作为安装过程的一部分进行了调整,并且通常不是用户应用程序,而是在点目录(即‘~/.myserviceable.
  3. Under’)中存储任何用户配置的用户主页。用户配置可以覆盖应用程序配置目录中的配置。在应用程序中所做的任何更改都会转到此处(另请参阅下一点)。var
  4. 您还可以使用$APP_HOME/var目录来存储特定于此应用程序实例(而不是用户)的任何其他可变数据。这种方法的另一个优点是,您可以通过简单地复制一个目录来移动和备份整个应用程序及其配置。

这说明了一些管理配置的标准技术。您可以使用不同的库和工具来实现它们,从原始JRE开始,添加Spring/Guice,或者使用完整的J2EE容器(可能带有嵌入式Spring)

管理配置的其他方法包括:

使用multiple base directories运行多个应用程序实例的

  1. 使用不同的configurations.
  2. Using lightweight registries实现集中式配置管理
  3. 一个集中管理的配置管理数据库(CMDB)文件,包含每台计算机的特定于主机的值,每晚都会与所有生产主机进行rsync。应用程序使用模板化配置,并在运行时根据当前主机名从CMDB中进行选择。
票数 26
EN

Stack Overflow用户

发布于 2008-10-11 17:46:46

Java有一个专门用java.util.prefs.Preferences编写的库。

代码语言:javascript
复制
Preferences userPrefs = Preferences.getUserNodeForPackage(MyClass.class); // Gets user preferences node for MyClass
Preferences systemPrefs = Preferences.getSysteNodeForPackage(MyClass.class); // Gets system preferences node for MyClass
Preferences userPrefsRoot = Preferences.getUserRoot(); // Gets user preferences root node
Preferences systemPrefsRoot = Preferences.getSystemRoot(); // Gets system preferences root node
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/194349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档