FileInputStream 在哪个文件夹中查找?

2022-09-03 12:10:47

我使用该行

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

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

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

Java 在哪个文件夹中查找?

我无法更改路径,因为代码不是由我编写的。


答案 1

它将在文件夹中查找,该文件夹是以下结果

System.getProperty("user.dir")

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

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


答案 2

它将在 JVM 进程的工作目录中查找,而不是 WAR 的根目录。该工作目录的位置取决于 Tomcat 进程是如何启动的。

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

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

此外,将 WAR 中的资源称为实际文件也是不好的做法。这只有在 WAR 分解为目录结构时才有效,如果 servlet 包含决定将 WAR 作为未分解文件运行,则此方法不起作用。通过坚持这些方法,您可以保持中立和可移植性。.WARgetResource...()

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


推荐