FileInputStream 在哪个文件夹中查找?

新手上路,请多包涵

我用线

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

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

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

Java 在哪个文件夹中查找?

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

原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 696
2 个回答

它将在作为结果的文件夹中查找

System.getProperty("user.dir")

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

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

原文由 PeterMmm 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

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

但是,如果如您所说,您无法更改代码,那就是个问题,因为代码已损坏且编写不当。您需要弄清楚如何启动 Tomcat,以便工作目录位于“正确”位置。这可能需要破解启动脚本。

原文由 skaffman 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题