加载没有绝对路径的文件的最佳方法

时间:2011-12-12 20:38:35

标签: java web-applications

我正在编写一个应用程序,它使用配置文件中的值来打开与数据库的连接。

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

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

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

我会非常强烈地说出这一点,大胆的面孔和一切:不要编写假定相对路径可行的代码。在我的工作中,我的前辈们在这里编写了这样的代码,现在我们已经成长了很多并需要与其他Java应用程序集成,这是一场噩梦。它只有在您可以保证JVM将以所需目录作为当前目录启动时才有效 - 当您开始在第三方容器中嵌入代码时,您将无法控制它。

获取文件的最佳方式是,正如您在问题评论中提到的那样,是使用ClassLoader.getResource(String path)和相关方法(例如,Class.getResourceAsStream(String path),如asgs链接中所述)。如果以现成的方式使用,这有一些小问题;主要是,将一个人的数据库配置文件放在应用程序jar文件或类路径中的想法,坦率地说是荒谬的。

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

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