从tomcat webapps文件夹中读取属性文件

时间:2010-09-08 07:38:24

标签: java tomcat

我已将属性文件放在tomcat的webaaps文件夹中但无法访问它。 我的代码是

InputStream is = ClassLoader.getSystemResourceAsStream("database.properties");
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("/database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("/webapps/database.properties");
}
if(is == null){
    is = ClassLoader.getSystemClassLoader().getResourceAsStream("webapps/database.properties");
}

但是,我将输入流视为空。

4 个答案:

答案 0 :(得分:3)

返回null的{​​{3}}方法表示在指定位置的类路径上找不到资源。这是有道理的,因为$TOMCAT_HOME/webapps不在类路径上。

因此要么将该文件放在应用程序的类路径中的目录中(如果你想在战争之外使用它,那么你必须把它放在$CATALINA_HOME/lib中 - 所有暗示后果)或改变你的方法(使用JNDI存储属性,使用绝对路径等)。

参考

答案 1 :(得分:2)

要通过类路径访问属性文件,我将这些文件放在“webapp / WEB-INF / classes”中。

这样做是标准的,是避免绝对路径问题的好方法。

如果您的项目具有标准的Maven结构,则由Maven管理:

  • 来源位于“src / main / java”
  • 属性位于“src / main / resources”

当Maven打包Web应用程序时,类在“webapp / WEB-INF / classes”中编译,资源被复制到同一目录。

答案 2 :(得分:1)

您不能以这种方式访问​​Web应用程序之外的文件。此文件不在您的类路径中,因此您无法通过“ClassLoader”获取该文件。把它放到你的类路径(里面* .war)或像这样访问它:

File f = new File("/absolute/path/to/your/file");
InputStream is = new FileInputStream(f);

但仍然tomcat/webapps不是属性文件的好地方。也许用户的主目录?然后你可以像这样访问它:

String home = System.getProperty("user.home");
File f = new File(home + "/yourfile.properties");

答案 3 :(得分:0)

需要使用包含此文件的文件夹名称更新classpath。我这样做了。我在Eclipse,tomcat和独立java中做过

java -cp。:$ CLASSPATH:some / location / your / config yourclass