![](/img/trans.png)
[英]Relative path for getting file in Tomcats webapps directory from a deployed web application
[英]Read a file from Tomcat webapps on different Tomcats
考虑以下几点:我得到了一个csv文件。 该文件存储在tomcat wepapps目录中。 该目录的路径取决于所使用的计算机。 有些用户为其Tomcat使用不同的位置并使用不同的名称。 我要实现以下目标。
通过Spring,我执行了以下操作:我执行了一个操作,该操作将一些数据从csv导入数据库。
<bean id="setCsvPathAction" class="custom.action.importcsv.SetCsvPathAction">
<property name="csvPath" value="C:/temp/test.csv"/>
</bean>
这对我来说很好。 为了使该路径对其他人更可配置,我得到了一个system.properties文件。 使用此文件,您可以轻松地覆盖属性:
setCsvPathAction.csvPath=#{tomcat_home}/webapps/test.csv
那就是我想要的。 我希望该路径位于Tomcat webapps目录中。 上面的方法不起作用。 你有什么提示如何实现这一目标吗?
大多数使用tomcat的人都会设置CATALINA_HOME环境变量。 您可以查询此环境变量并检索值。
String tomcat_home = System.getenv("CATALINA_HOME");
if(tomcat_home){
setCsvPathAction.csvPath=tomcat_home+"/webapps/test.csv"
}
注意:不能保证在每个使用tomcat的系统上都设置此环境变量
有关getenv()的更多信息-http: //docs.oracle.com/javase/7/docs/api/java/lang/System.html#getenv%28%29
如果要放在web apps文件夹中,则也可以使用类加载器来获取本地路径,因此您无需进行任何配置。
someObject.getClass()。getClassLoader()。getResourceAsStream(“ path / refferenced / to / app / root /”);
.properties文件的解决方案是:$ {catalina.home}接下来,我需要一个独立于系统环境的FileInputStream。 我尝试了以下方法:
public class environmentTest {
public static void main(final String[] args) {
System.out.println(System.getenv("CATALINA_BASE"));
}
}
null在控制台上打印。
Person类包含jpg文件的名称。 该文件位于webapps文件夹中。 我希望路径独立于所使用的计算机。 我尝试了以下方法:
File file = new File(System.getenv("CATALINA_HOME") + "/webapps/" + person.getPhoto());
FileInputStream fileInputStream = new FileInputStream(file);
遗憾的是,这是行不通的,因为正如unekwu所说,此环境变量未在所有系统上设置。 您知道在这种情况下我能做什么吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.