2011-05-02 126 views
8

我用线FileInputStream在哪个文件夹中查找?

FileInputStream stream = new FileInputStream("myfile.properties"); 

打开一个属性文件,而不指定的路径。

在Apache Tomcat上运行时,无法找到该文件。 我将该文件放入应用程序的根文件夹中。

Java在哪个文件夹中查找?

我不能改变路径,因为代码不是由我自己决定的。

回答

15

它看起来是在文件夹中的结果

System.getProperty("user.dir") 

这可能在任何地方。这取决于tomcat服务器启动时的当前工作目录。

尝试加载一个小的servlet,在加载时打印该信息,如果无法从标准日志或tomcat启动过程中找出结果。

+0

+1这条线很好,我可以改变它,以及如何? – shareef 2012-06-11 20:39:12

+0

改变什么? – PeterMmm 2012-06-11 20:47:08

+0

使用输入蒸汽电话搜索文件的默认目录 – shareef 2012-06-11 20:53:23

0

它通常默认在主目录中工作。

为了读取性能,您应该使用Class.getResourceAsStream(字符串)

顺便说一句,一个更合适的位置是META-INF目录

5

它将查看JVM进程的工作目录,而不是WAR的根目录。工作目录取决于Tomcat进程的启动方式。

因此,您不应该这样做。您应该通过询问ServletContext对象(其具有查找资源流的各种方法)来从WAR内部获得对资源的引用,例如,从一个Servlet内部:

InputStream stream = getServletContext().getResourceAsStream("myfile.properties"); 

而且,将WAR内的资源称为实际文件是个不好的做法。这只有在WAR被分解到一个目录结构中时才会起作用,并且如果servlet包含决定将WAR作为未爆炸的.WAR文件运行,则这将不起作用。坚持getResource...()方法,你保持中立和便携。

但是,如果像你说的那样,你不能改变代码,那么这是一个问题,因为代码被破坏并写得很差。您需要弄清楚如何启动Tomcat,以便工作目录位于“正确”的位置。这可能会导致黑客启动脚本。

+0

如何获取ServletContext对象? – Alex 2011-05-02 12:27:48

+0

@Alex:从servlet内部,如答案所述。 – skaffman 2011-05-02 12:49:24

0

如果我记得正确: Tomcat搜索类路径中的所有资源...因此,“myfile.properties”(没有路径)将位于类路径中的任何“顶部”目录中。 “默认顶部”(如果你没有指定类路径)是WEB-INF/classes;事实上,我认为Tomcat总是(逻辑上)将WEB-INF /类添加到类路径中,即使您不希望它......多年来没有与Tomcat一起玩过。

+2

该死的我是sloooooow ;-) – corlettk 2011-05-02 10:32:52

相关问题