请考虑以下事项: 我有一个csv文件。该文件存储在tomcat wepapps目录中。此目录的路径取决于所使用的计算机。有些用户为其Tomcats使用不同的位置并使用不同的名称。我想实现以下目标。
通过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目录中。以上不起作用。你有任何提示如何实现这个目标吗?
答案 0 :(得分:0)
大多数使用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
答案 1 :(得分:0)
如果它将在web apps文件夹中,您也可以使用类加载器来获取本地路径,这样您就不必配置任何内容。
someObject.getClass()getClassLoader()的getResourceAsStream( “路径/ refferenced /到/应用程序/根/”);。。
答案 2 :(得分:0)
.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所说,这个环境变量没有在所有系统上设置。你知道在这种情况下我能做些什么吗?