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。