FileInputStream在哪个文件夹中查找?

我用的是这条线

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

在不指定路径的情况下打开属性文件。

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

Java在哪个文件夹中查找?

我无法改变路径,因为代码不是我的。

它将查看结果的文件夹

 System.getProperty("user.dir") 

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

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

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

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

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

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

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

它通常默认在主目录中。

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

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

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