Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在从tomcat webapps文件夹读取属性文件_Java_Tomcat - Fatal编程技术网

Java 正在从tomcat webapps文件夹读取属性文件

Java 正在从tomcat webapps文件夹读取属性文件,java,tomcat,Java,Tomcat,我在tomcat的webaaps文件夹中放置了一个属性文件,但无法访问它。 我的代码是 InputStream is = ClassLoader.getSystemResourceAsStream("database.properties"); if(is == null){ is = ClassLoader.getSystemClassLoader().getResourceAsStream("database.properties"); } if(is == null){ i

我在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");
}
尽管如此,我还是将输入流设置为null。

返回
null
的方法意味着在指定位置的类路径上找不到资源。这是有意义的,因为
$TOMCAT_HOME/webapps
不在类路径上

因此,要么将该文件放在应用程序类路径上的目录中(如果您想将其放在war之外,那么您必须将其放在
$CATALINA_HOME/lib
-以及所有隐含的结果中),要么更改方法(使用JNDI存储属性,使用绝对路径,等等)

工具书类
  • ApacheTomcat 6.0文档

您不能以这种方式访问web应用程序外部的文件。此文件不在类路径中,因此无法通过“类加载器”获取它。将其放入类路径(在*.war内)或按如下方式访问:

File f = new File("/absolute/path/to/your/file");
InputStream is = new FileInputStream(f);
String home = System.getProperty("user.home");
File f = new File(home + "/yourfile.properties");
但仍然
tomcat/webapps
不是放置属性文件的好地方。可能是用户的主目录?然后您可以这样访问它:

File f = new File("/absolute/path/to/your/file");
InputStream is = new FileInputStream(f);
String home = System.getProperty("user.home");
File f = new File(home + "/yourfile.properties");

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

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

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

  • 源代码位于“src/main/java”中
  • 属性位于“src/main/resources”中

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

需要使用包含此文件的文件夹名更新类路径。我做到了,它成功了。我在Eclipse、tomcat和独立java中做过


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

我不希望我的属性文件位于war文件中。如果我这样做,它会工作。我的要求是,我需要读取war文件之外的属性文件,以便我可以在任何环境中部署相同的war文件—uat、prod等,使用maven,这将作为打包时间进行管理。您可以指定包配置文件(uat、prod等)。属性文件将包含在具有良好参数的war中。