设置在Tomcat上运行的相对路径

问题描述 投票:0回答:1

我希望使用:

classpath:/mydata/response.xml
将文件复制到。 像这样

Path dest = Paths.get("classpath:/mydata/response.xml");

对于 Spring Boot,这适用于其他地方,但不使用

Paths

我想复制一个文件...

InputStream is = file.getInputStream();
// Which relative Path syntax?
Path dest = Paths.get("./src/main/resources/mydata"+fileName);
Files.copy(is, dest);

关于如何设置在 Tomcat 上存储文件的相对路径有什么建议吗?

我的目标是:

MyProject\src\main\resources\mydata

这是一个不错的 Spring Boot 项目。

java path nio
1个回答
1
投票

使用相对于

CLASSPATH
的路径实际上是不可能实现的,因为类路径是目录和/或 jar 文件的 list。 如果有多个目录,应该使用哪一个?如果只有jar 文件,那就毫无意义了。 我们的 Tomcat 服务器启动脚本之一以这样的方式开始类路径:

CLASSPATH=$CATALINA_HOME/bin/tomcat-juli.jar:\ $JAVA_HOME/lib/tools.jar:\ $CATALINA_HOME/bin/commons-daemon.jar:\ $CATALINA_HOME/bin/bootstrap.jar

如果您想存储/访问 Web 应用程序空间内的文件,您可以使用

ServletContext 来解析与应用程序安装目录相关的路径。使用 getRealPath()

 方法
,但要小心,因为它可能会返回“如果无法执行翻译,则为 null”。

在 Web 应用程序的文件系统结构中存储任何内容可能会导致许多问题,因为重新部署必须保留添加的文件或销毁它们。 我建议创建一个

可配置 数据目录,其中该目录的根可以在 .properties

 文件中指定,或者作为 web.xml 文件中的 
<init-param>
(或其他部署描述符,具体取决于关于您可能使用的框架)。

© www.soinside.com 2019 - 2024. All rights reserved.