servlet能否读取本地文件???

03-07-30 wwlhp@jdon.com

有一个database connection pool类,读取本地相同目录下的属性文件,然后建立一个连接池。然后servlet就可以使用这个连接池。

我的代码是:

new FileInputStream("db_login.property");

报错说文件找不到。然后改成

new FileInputStream(".\\db_login.property");

还是报错。最后改成

new FileInputStream("G:\\Program Files\\Tomcat 4.1\\webapps\\coffee_break\\WEB-INF\\classes\\db_login.property"); 这样才通过

请问为什么会出现这样的怪事?

这里是整个应用:wwlhp@jdon.comca35p7p04M.rar

frenzieddragon
2003-07-30 16:08

路径不对而已

FileInputStream的构造函数的路径要么是相对于当前路径的路径,要么是绝对路径。当前路径是指执行当前java程序的路径,这个不是我们控制得了的,例如你在c:目录运行java org.ddd.eee,那么当前路径是c:,与你的class所在路径没有关系。

如果真的想要使用相对路径,可以使用相对于classpath的路径,方法是使用Class类(在java类中调用getClass()方法可以得到自己的Class对象)的getResource和getResourceAsStream方法,参数如果首字符是/则表示是在某一个classpath下的绝对路径,如果不是则表示当前class文件相对路径。例如:classpath=c:\a;d:\b,如果你在c:\a或者d:\b下放一个a.property,那么你用/a.property就可以找到(注意不要两个地方都放,因为无法确定哪一个会被使用);或者你的eee.class在c:\a\org\ddd下,那么也可以用../../a.property来找到你的文件

wwlhp@jdon.com
2003-07-30 16:51

可是我写了一个小的test类,是一个本地程序,我用的就是

new FileInputStream("db_login.property"); 结果运行正确!

后来我改成了,

this.getClass().getResourceAsStream("./db_login.property"); 成功了。

感谢frenzieddragon!