我需要打开一个文件,该文件位于与部署到Tomcat的Java应用程序的contextPath相关的目录中。我要打开的文件是:
/ c /程序文件/Java/tomcat9/webapps/mymap/WEB-INF/classes/static/data/Demo-init.owl
我的Tomcat目录结构如下:
kcason@36CRNN2 MINGW64 /c/Program Files/Java/tomcat9/webapps/mymap/WEB-INF/classes/static/data
$ ls -l
total 12612
-rw-r--r-- 1 kcason 1049089 189827 Nov 12 11:40 Demo-init.owl
在询问Tomcat的contextPath在哪里时,它返回“ / mymap”,相对于Tomcat webapps目录而言是正确的。
@Autowired
private HttpServletRequest httpServletRequest;
public HttpServletRequest getHttpServletRequest() {
return httpServletRequest;
}
String contextPath = getHttpServletRequest().getContextPath();
System.out.println("upload - contextPath: " + contextPath);
输出为:
upload - contextPath: /mymap
但是,如果我尝试打开:
contextPath +“ /WEB-INF/classes/static/data/Demo-init.owl”
...它试图打开:
c:/mymap/WEB-INF/classes/static/data/Demo-init.owl 。
如果我尝试打开:
“ ./” + contextPath +“ /WEB-INF/classes/static/data/Demo-init.owl”
...它试图打开:
c:/crap//WEB-INF/classes/static/data/Demo-init.owl“
...因为我是从 c:/ crap 启动Tomcat的。
我正在尝试使用以下方法查看我是否具有正确的目录路径:
rootDirectory = ctx.getContextPath();
staticDirectory = rootDirectory + "/WEB-INF/classes/static/data";
File file = new File(staticDirectory);
if (!file.isDirectory()) {
System.out.println("oops!");
}
该Web应用程序可能会移动到另一个web服务器目录路径不同的Tomcat服务器,因此我无法对此进行硬编码,这还是很危险的。
如何获取…/ mymap目录的正确完整路径,或者至少打开相对于该文件的文件?