日期:2014-05-17  浏览次数:20912 次

工程部署到tomcat后无法读取文件
做了一个project,其中有一个类中要从外存读取文件,如下:

FileInputStream fis = new FileInputStream("index.idx");
ObjectInputStream ois = new ObjectInputStream(fis);

index.idx在工程的根目录下,我在Eclipse下执行时,读取正常。
当我把该project部署到tomcat下时(index.idx文件也在该project的根目录下),就读不到文件,说路径不对。
我把index.idx文件拷到很多地方试,WEB-INF下,class下,都不行,最后把这个文件拷到tomcat的bin目录下,读出来了,真晕。

请问如何使程序能从工程根目录下读取文件? tomcat怎么会跑到bin目录下去找该文件?

------解决方案--------------------
FileInputStream fis = new FileInputStream("index.idx"); 在这里要指向文件的绝对路径,例如d:/sss/sss/ssss/index.idx

相对根路径在tomcat下有的时候会指向tomcat/bin 目录



------解决方案--------------------
用this.getClass().getClassLoader().getResourceAsStream(relativePath)来从classpath中来去,如:
将index.idx 放在WEB-INF/classes下,则可以用
InputStream is = this.getClass().getClassLoader().getResourceAsStream("/index.idx");

------解决方案--------------------


探讨
用this.getClass().getClassLoader().getResourceAsStream(relativePath)来从classpath中来去,如:
将index.idx 放在WEB-INF/classes下,则可以用
InputStream is = this.getClass().getClassLoader().getResourceAsStream("/index.idx");

------解决方案--------------------
把路径带进去不就行了。
------解决方案--------------------
要指定文件在硬盘上的绝对路径