我正在编写一个应用程序,它使用配置文件中的值打开到数据库的连接。
该应用程序属于我指定的目录层次结构。因此,我知道应用程序根目录中配置文件的相对路径。
但是,由于我的应用程序的用户可能会将应用程序的根目录安装在任何地方,所以我不知道根目录的绝对路径。
查找配置文件(或任何文件)的最佳策略是什么?在编码良好的应用程序中,类似的问题通常是如何处理的?
非常感谢!
发布于 2011-12-13 08:44:08
我将非常强调这一点,用粗体和所有的东西:不要编写假设相对路径可以工作的代码。在我的工作中,我的前辈们到处都在编写这样的代码,现在我们已经成长了很多,需要与其他Java应用程序集成,这简直是一场噩梦。只有当您可以保证JVM将以您所需的目录作为当前目录启动时,它才能起作用-并且当您开始将代码嵌入到第三方容器中时,您将无法控制它。
获得文件的最好方法是,正如asgs在对您的问题的评论中提到的那样,是使用ClassLoader.getResource(String path)和相关方法(例如,asgs链接中提到的Class.getResourceAsStream(String path) )。如果以现成的方式使用,这会有一些小问题;坦率地说,将数据库配置文件放在应用程序jar文件或类路径中的想法是荒谬的。
但是,可以修复的。通过使用ClassLoader访问资源,您基本上是将查找资源的工作委托给ClassLoader,因此以后当您想要更改读取文件的位置时,只需将默认的ClassLoader替换为您想要的内容即可。(然而,如果您像我以前的同事那样依赖相对文件系统路径,那么您就完蛋了。)
ClassLoaders还允许你做其他的事情,比如通过超文本传输协议获取配置文件-这在云或集群应用中很有用。
https://stackoverflow.com/questions/8480502
复制相似问题