FileInputStream在哪个文件夹中查找?

时间:2011-05-02 10:24:36

标签: java tomcat

我使用

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

打开属性文件而不指定路径。

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

Java在哪个文件夹中查找?

我无法改变路径,因为代码不在我身边。

4 个答案:

答案 0 :(得分:18)

它将查找

结果的文件夹
System.getProperty("user.dir")

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

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

答案 1 :(得分:6)

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

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

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

此外,将WAR内部的资源称为实际文件也是不好的做法。这仅在WAR扩展到目录结构中时才有效,如果servlet包含决定将WAR作为未爆炸的.WAR文件运行,则无效。通过坚持getResource...()方法,您可以保持中立和便携。

但是,正如您所说,如果您无法更改代码,那么这就是一个问题,因为代码被破坏并且编写得很糟糕。您需要弄清楚如何启动Tomcat以使工作目录处于“正确”的位置。这可能需要破解启动脚本。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

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

为了读取属性,您应该使用Class.getResourceAsStream(String)

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