我已将属性文件放在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");
}
但是,我将输入流视为空。
答案 0 :(得分:3)
返回null
的{{3}}方法表示在指定位置的类路径上找不到资源。这是有道理的,因为$TOMCAT_HOME/webapps
不在类路径上。
因此要么将该文件放在应用程序的类路径中的目录中(如果你想在战争之外使用它,那么你必须把它放在$CATALINA_HOME/lib
中 - 所有暗示后果)或改变你的方法(使用JNDI存储属性,使用绝对路径等)。
答案 1 :(得分:2)
要通过类路径访问属性文件,我将这些文件放在“webapp / WEB-INF / classes”中。
这样做是标准的,是避免绝对路径问题的好方法。
如果您的项目具有标准的Maven结构,则由Maven管理:
当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