我无法从Servlet(Java EE)获得真正的路径



当我想在Java EE中获得一个真正的路径时,使用以下指令:

String rootPath = getServletConfig().getServletContext().getRealPath("/");
System.out.println(rootPath);

结果是:C:UserssaadDesktop pds.metadata.plugins org.eclipse.wst.server.core tmp0 wtpwebapps 专长

通常,我必须得到这样的结果:

C: saad 用户桌面 pds 专长

有谁能帮帮我吗?

这是一个很好的例子,说明为什么"相对于应用程序的文件系统路径"的概念在servlet中实际上没有意义。将servlet部署到容器中时,不能保证它驻留在真实的文件系统位置。servlet容器可以选择直接从.war文件执行它,而不展开它,或者它可以从一个根本不受传统文件系统支持的URL读取应用程序代码。

在您的示例中,返回的长路径正是Eclipse部署应用程序的位置。该路径在上下文中是100%正确的,因为如果您查看该位置的文件系统,您将找到应用程序的副本,但显然不是您期望的。

一般来说,不可能移植地引用任何相对于应用程序的文件路径,因为该路径可能不存在。

Tomcat目录路径(Tomcat/bin):

File inputFile = new File("file.xml"); // tomcat_dir/bin/file.xml

其他Tomcat目录的路径,例如"webapps":

File inputFile = new File("../webapps/file.xml"); // tomcat_dir/webapps/file.xml

摆脱绝对路径的好方法:)

最新更新