在java中读取配置文件,可以使用相对路径吗?
如题,我在做一个JSP项目时,自己写了一个数据库连接工具类,它是从properties文件中读取数据库连接相关信息的,可是这个类一直报错说:配置文件的路径不对!
我的这个类(是编译后的class文件)是和配置文件放在同一个目录中的,而且在代码中我使用的是相对路径创建File对象的,如File fileName = new File( "SystemConfig.properties ");这样应该可以了吧?可是它就是报错,如果我使用SystemConfig.properties的绝对路径就不会出错了,可是那样多不方便啊,我的WEB程序不便于移植啊,使用相对路径就不会出现移植时产生的问题.
有谁能说我一个说明吗?
补充:是不是要在new File( " ");参数中要加什么斜杠之类的,不过我试了没有弄出来.
我就想难道使用File创建文件对象就不允许我们程序员使用相对路径来创建吗?
------解决方案--------------------指定CLASSPATH就可以读取到相对路径的文件啦
------解决方案--------------------呵呵,不在Web中还是比较难办。
最终跟Web都不相关吗?
考虑JNDI指定DataSources。
然后每次连接的时候是不是使用JNDI就可以了。
如果你要读取的文件中有别的信息,必须要读文件的话。
能不能考虑用系统的环境变量来构造路径?
例如,%JAVA_HOME%, %TOMCAT_HOME%之类的?
这个我就帮不上忙了。呵呵。
------解决方案--------------------用的是相对路径创建File对象的,虽然在J2SE应用程序中可能还算正常,但是到了JSP程序中,有时会出问题!而且这个路径,在不同的服务器中都是不同的!
Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
可以试试sgrl(小关) 的办法。使用相对classpath的相对路径,这样楼主可能要编写一个类。用相对路径来访问classpath外面的资源
------解决方案--------------------这样可以达到目的.InputStream infile = this.getClass().getResourceAsStream( "/SystemConfig.properties ");
props.load(infile);
------解决方案--------------------ResourceBundle resource = ResourceBundle.getBundle( "net/rubyeye/test/config ");
得到net/rubyeye/test/下面的config.properties
value=resource.getString( "url ") ;//得到配置文件的url属性