我用线
FileInputStream stream = new FileInputStream("myfile.properties");
在不指定路径的情况下打开属性文件。
在 Apache Tomcat 上运行时,找不到该文件。我将文件放入应用程序的根文件夹中。
Java 在哪个文件夹中查找?
我无法更改路径,因为代码不是我写的。
原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议
我用线
FileInputStream stream = new FileInputStream("myfile.properties");
在不指定路径的情况下打开属性文件。
在 Apache Tomcat 上运行时,找不到该文件。我将文件放入应用程序的根文件夹中。
Java 在哪个文件夹中查找?
我无法更改路径,因为代码不是我写的。
原文由 Alex 发布,翻译遵循 CC BY-SA 4.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 许可协议
4 回答950 阅读✓ 已解决
4 回答1.1k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答679 阅读✓ 已解决
2 回答1.6k 阅读
2 回答1.6k 阅读
2 回答1.2k 阅读
它将在作为结果的文件夹中查找
这可能在任何地方。这取决于 tomcat 服务器启动时的当前工作目录。
如果您无法从标准日志或 tomcat 启动过程中找出答案,请尝试加载一个在加载时打印该信息的小型 servlet。