为什么new File()希望Java web app中的文件位于TOMCAT_HOME/bin中?

为什么new File()希望Java web app中的文件位于TOMCAT_HOME/bin中?,java,tomcat,file-io,Java,Tomcat,File Io,我在EclipseIDE中有一个Java项目。如果我创建新的文件对象。比如File File=new文件(“someFile.txt”)。它希望ProjectHome中存在someFile.txt。我可以把它放在一些目录中,比如config/someFile.txt,并可以在新的文件构造函数中使用它。这里一切都好 当我制作这个项目的JAR并将其放入WEB-INF/lib时。然后新建文件(“someFile.txt”)code需要TOMCAT\u HOME/bin中的文件。我用file.getAb

我在EclipseIDE中有一个Java项目。如果我创建新的文件对象。比如
File File=new文件(“someFile.txt”)
。它希望ProjectHome中存在someFile.txt。我可以把它放在一些目录中,比如
config/someFile.txt
,并可以在新的文件构造函数中使用它。这里一切都好

当我制作这个项目的JAR并将其放入WEB-INF/lib时。然后
新建文件(“someFile.txt”)
code需要TOMCAT\u HOME/bin中的文件。我用
file.getAbsolutePath()检查了它。这是我无法控制的。我的问题是,为什么在java web应用程序中,新文件希望位于bin控制器中。为什么不把项目放在家里呢。这样我就可以轻松地导航到我的配置目录。甚至
。/../
导航也不起作用。因为它们附加了
TOMCAT_HOME/bin/./../someFile.txt
,导致文件不存在


我希望我已经很好地解释了我的问题。

TOMCAT_HOME/bin
是JVM进程的工作目录,因此每个相对路径都将相对于该目录进行解析


除了在webapps中不使用相对文件路径之外,您没有什么可以做的。更好的方法是,使用
ServletContext.getRealPath()
Class.getResourceAsStream()
TOMCAT_HOME/bin
是JVM进程的工作目录,因此每个相对路径都将相对于该目录进行解析


除了在webapps中不使用相对文件路径之外,您没有什么可以做的。更好的方法是使用
ServletContext.getRealPath()
,或者
Class.getResourceAsStream()

这可能会让您感兴趣这可能会让您感兴趣