【问题标题】:Config files - where to put them in Java?配置文件 - 将它们放在 Java 中的什么位置?
【发布时间】:2010-02-11 21:58:22
【问题描述】:

我有一个 java 桌面应用程序,配置文件的问题让我很烦恼。

我想要的是让我的可分发应用程序文件夹看起来像这样:

MyApp/Application.jar
MyApp/SpringConfig.xml
MyApp/OtherConfig.xml
MyApp/lib

但目前SpringConfig.xmlApplication.jar 内部,我什至无法以编程方式找到OtherConfig.xml

我不在乎我如何在编译路径中设置各种文件,只要它们最终看起来像上面那样。

所以..

  • 我应该将文件放在我的开发设置中的什么位置?
  • 以及如何以编程方式访问它们?

谢谢

【问题讨论】:

    标签: java spring configuration


    【解决方案1】:
    • spring config文件与你的应用程序的代码和接线有关,所以最好在jar里面,用户可以修改

    • (new File(".")).getAbsolutePath(); 返回 jar 的绝对路径 - 然后您可以通过简单的 FileInputStream 加载 OtherConfig.xml

    • 如果SpringConfig.xml 包含数据库凭据等配置数据,请将它们放入外部application.properties 并使用自定义PropertyPlaceholderConfigurer 加载外部文件。

    因为我们不了解您的环境,所以无法回答“我应该将文件放在我的开发设置中的什么位置”的问题。

    实际上,如果您希望能够编辑配置您自己(不一定是最终用户),您可以使用任何 zip 软件(例如 WinRAR)打开 jar 并编辑jar 中的配置文件。

    更新:您似乎无法将配置文件放在 jar 之外。好吧,首先,您可以手动完成 - 每当 .jar 完成时,只需从内部删除配置文件并将其放在外面。

    【讨论】:

    • 好的,我正在使用 netbeans。我还没有解决这个问题。如果我在“配置”包中包含文件,当我构建时,它们会被卷入一个 .jar 文件中,这违背了拥有配置文件的意义!接受你对 spring 配置的看法——我不介意被编译,但我需要外部访问一个普通的配置文件。这让我发疯了......
    • 最终用户是否必须能够编辑您的配置?或者只是你/你的队友。检查我的更新。
    • 是的,这是必要的——我为最终用户提供了一些配置选项,虽然我宁愿他们不必解压缩并重新压缩 jar,这就是我想要配置文件的原因根目录。我只是不知道我该怎么做!顺便谢谢你的建议
    • 嗯,您可以简单地将其从包装中取出并在包装后将其放在外面。然后按照我上面描述的方式阅读。
    • 好的,但是我在 netbeans 中找不到任何位置来放置它,以便它既可以复制到 dist 文件夹中,又可以在调试中访问 - 有什么建议吗?
    【解决方案2】:

    我通常会创建一个结构,其中我有一个 src/ 目录,然后其他目录存在于同一级别。其中一些目录包括:

    • lib/ - 外部库
    • config/ - 配置文件
    • resources/ - 我使用的各种资源(图片等)

    在同一级别,然后我创建一个 Ant 脚本来执行我的构建,以便在构建时将适当的配置文件、资源、lib 等复制到我的 JAR 文件中。到目前为止,它对我来说非常有用,并且是一个相当容易理解的组织结构。

    更新:访问我的配置文件通常是通过知道它们的位置并打开它们并在代码中读取它们来完成的。因为我使用 Ant 构建,所以我确保我的配置文件位于我期望的位置。因此,例如,在我最近创建的一个应用程序中,当我编译时,我的 JAR 文件位于顶层目录中(相对于应用程序发布结构)。然后,在同一级别有一个“主”配置文件。在主题文件夹中有一个“主题”配置文件。

    要读取各种文件,我只需像打开任何其他文件一样打开它们,然后将它们读入并从那里开始。它没有什么特别花哨的,但效果很好,如果我需要手动更改配置,它很容易。

    【讨论】:

    • @MalcomTucker - 更新了我的帖子以回答您的问题。
    • 干杯,你能提供一个代码 sn-p 来说明你在应用程序相对路径上的配置文件中是如何读取的吗?我认为您没有将这些位置硬编码到您的项目中......谢谢
    【解决方案3】:

    在开发模式下,将它们放在源目录中,它们将被复制到您的类文件夹中,然后您可以使用类加载器访问它们。

    例子:

    URL url =  ClassLoader.getSystemResource("test.properties");
    Properties p = new Properties();
    p.load(new FileInputStream(new File(url.getFile())));
    

    在 Prod 模式下,您可以将它们作为 jar 的一部分。

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 1970-01-01
      • 2022-01-15
      • 2010-12-04
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2014-08-13
      相关资源
      最近更新 更多