从不同的Tomcats上的Tomcat webapps中读取文件

时间:2014-01-13 16:52:50

标签: java spring tomcat csv

请考虑以下事项: 我有一个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目录中。以上不起作用。你有任何提示如何实现这个目标吗?

3 个答案:

答案 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所说,这个环境变量没有在所有系统上设置。你知道在这种情况下我能做些什么吗?