2011-12-12 91 views
1

我正在编写一个应用程序,它使用配置文件中的值打开到数据库的连接。加载没有绝对路径的文件的最佳方法

该应用程序属于我指定的目录层次结构。因此,我知道从我的应用程序的根目录到我的配置文件的相对路径。

但是,由于我的应用程序的用户可能会在任何地方安装应用程序的根目录,所以我不知道根目录的绝对路径。

找到配置文件(或任何文件)的最佳策略是什么?编码好的应用程序通常如何处理类似的问题?

非常感谢!

+0

对于有兴趣的人,我发现这个:http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html – bibs

回答

1

我会用非常强烈的面孔和一切来表达这一点:不要编写假设相对路径可行的代码。在我的工作中,我的前任在各处编写这样的代码,现在我们已经发展壮大,需要与其他Java应用程序集成,这是一场噩梦。只有当你可以保证JVM将以你想要的目录作为当前目录启动时 - 以及当你开始在第三方容器中嵌入你的代码时,你将不能控制它。

获取文件的最好方法是,如同在你的问题的评论中提到的那样,使用ClassLoader.getResource(String path)和相关方法(例如,在asgs的链接中提到的Class.getResourceAsStream(String path))。如果以现成的方式使用它,这会产生一些小问题;主要是,在应用程序jar文件或classpath中放置一个数据库配置文件的想法坦白地说是荒谬的。

但是,可以固定。通过使用ClassLoader访问资源,基本上是将找到该资源的工作委托给ClassLoader,所以稍后如果要更改从中读取文件的位置,只需将默认的ClassLoader替换为做你想做的事。 (而如果你像我的老同事那样做,并依赖于相关的文件系统路径,那么就搞砸了。)

ClassLoaders还允许您执行其他技巧,例如通过HTTP获取配置文件 - 这可能对云或集群应用程序。