我用这条线
FileInputStream stream = new FileInputStream("myfile.properties");
Run Code Online (Sandbox Code Playgroud)
在不指定路径的情况下打开属性文件.
在Apache Tomcat上运行时,无法找到该文件.我将文件放入应用程序的根文件夹中.
Java在哪个文件夹中查找?
我无法改变路径,因为代码不是我的.
Pet*_*Mmm 19
它会查看结果的文件夹
System.getProperty("user.dir")
Run Code Online (Sandbox Code Playgroud)
这可能是任何地方.这取决于启动tomcat服务器时的当前工作目录.
如果无法从标准日志或tomcat启动过程中找出,请尝试加载在加载时打印该信息的小型servlet.
它将查看JVM进程的工作目录,而不是WAR的根目录.该工作目录的位置取决于Tomcat进程的启动方式.
因此,你不应该这样做.您应该通过询问ServletContext对象(具有查找资源流的各种方法)从WAR内部获取对资源的引用,例如从Servlet内部:
InputStream stream = getServletContext().getResourceAsStream("myfile.properties");
Run Code Online (Sandbox Code Playgroud)
此外,将WAR内部的资源称为实际文件也是不好的做法.这仅在WAR扩展到目录结构中时才有效,如果servlet包含决定将WAR作为未爆炸.WAR文件运行,则无效.通过坚持使用这些getResource...()方法,您可以保持中立和便携.
但是,正如您所说,如果您无法更改代码,那么这就是一个问题,因为代码被破坏并且编写得很糟糕.您需要弄清楚如何启动Tomcat以使工作目录处于"正确"的位置.这可能需要破解启动脚本.