2010-02-11 70 views
4

我有一个Java桌面应用程序,配置文件的问题令我烦恼。配置文件 - 将它们放入Java的位置?

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

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

但此刻SpringConfig.xml里面Application.jar,我甚至不能以编程方式查找OtherConfig.xml

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

所以..

  • 我在哪里可以将文件放在我的开发设置?
  • 以及如何以编程方式访问它们?

感谢

回答

0

1)我不知道如何回答这个问题。 ¿哪里可以轻松找到它们? (不要误会我的错误,不是你的错,我是那个不明白的人)

2.)在你的操作系统中使用环境变量(如PATH,但使用唯一的名称,“APPNAME_CONFIG”或其他)。然后在你的代码中引用它们。

1

在开发模式下,将它们放在源代码目录中,它们将被复制到您的classes文件夹中,然后您可以使用classloader来访问它们。

例子:

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

在PROD模式下,你可以让他们的罐子的一部分。

3
  • Spring配置文件与应用程序的代码和布线,因此它最好是罐子里面,都应受到用户

  • (new File(".")).getAbsolutePath();返回绝对改变你罐子的路径 - 那么你可以通过一个简单的FileInputStream

  • 加载OtherConfig.xml如果SpringConfig.xml包含像数据库凭据配置数据,把它们放在一个外部application.properties和使用自定义PropertyPlaceholderConfigurer加载外部文件。

回答“我把文件放在我的开发环境中”这个问题是不可能的,因为我们不知道你的环境。

其实,如果你希望能够编辑配置自己(而不一定是最终用户),您可以打开jar任何压缩软件(WinRAR的为例),从内部的编辑配置文件罐。

更新:因为看起来你不能将配置文件放在jar外面。首先,可以手动完成 - 无论何时完成.jar,只需从内部删除配置文件并将其放置在外部。

+0

好吧,即时通讯使用netbeans。我还没有解决这个问题。如果我在'配置'包中包含文件,那么当我构建时,它们会滚动到一个.jar文件中,该文件破坏了配置文件!接受你对Spring配置的评论 - 不要介意被编译,但我需要外部访问一个普通的配置文件。它使我疯狂...... – MalcomTucker 2010-02-12 08:31:04

+0

终端用户是否有必要编辑你的配置?或者只是你/你的队友。检查我的更新。 – Bozho 2010-02-12 08:34:11

+0

是的,这是必要的 - 我为最终用户提供了一些配置选项,虽然我宁愿他们不必解压并重新压缩jar,这就是为什么我想要在根目录中的配置文件。我只是不知道我该怎么做!感谢您的建议,方式为 – MalcomTucker 2010-02-12 10:14:20

1

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

  • 的lib/- 外部库
  • 配置/ - 配置文件
  • 资源/ - 各种资源,我用(图像等)

在同一水平,然后创建一个Ant脚本来执行我的构建,以便在构建时将相应的配置文件,资源,lib等复制到我的JAR文件中。这对我而言非常有用,并且对组织结构的理解也相当容易。

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

要阅读各种文件,我只是打开它们,因为我会任何其他文件,并阅读它们并从那里去。它没有什么特别的花哨,但它运行良好,并且如果我需要这样做,可以很容易地手动更改配置。

+0

你如何在代码中访问你的配置文件? – MalcomTucker 2010-02-11 23:25:43

+0

@MalcomTucker - 更新我的文章回答你的问题。 – JasCav 2010-02-12 15:41:14

+0

欢呼声,你可以提供一个代码片段,你如何阅读应用程序相对路径上的配置文件?我认为你不会将这些位置硬编码到你的项目中,谢谢 – MalcomTucker 2010-02-12 16:58:11