1

我在 java 中有一个 Web 应用程序项目。如果我部署该项目,则该项目在文件夹级别的 Tomcat 服务器上具有如下结构:

-conf
-image
-META-INF
-profiles
-WEB-INF

我想从文件夹“profiles”和“config”中读取一些文件。我尝试使用

Properties prop = new Properties();
try{
    prop.load(new FileInputStream("../webapps/WebApplicatioProject/profiles/file_001.properties"));
} catch (Exception e){
   logger.error(e.getClass().getName());
}

那没起效。然后我尝试了

Properties prop = new Properties();
try{
    prop.load(getClass().getResourceAsStream("../../../../profiles/fille_001.properties"));
} catch (Exception e){
    logger.error(e.getClass().getName());
}

它也不起作用。

如何从 WEB-INF 文件夹之外的文件夹“profiles”和“conf”中读取文件?

4

6 回答 6

2

如果文件在 WebContext 文件夹下,我们通过调用 ServletContext 对象引用获得。

Properties props=new Properties();
    props.load(this.getServletContext().getResourceAsStream("/mesdata/"+fileName+".properties"));

如果文件在类路径下,我们可以使用类加载器获取文件位置

Properties props=new Properties();
    props.load(this.getClass().getClassLoader.getResourceAsStream("/com/raj/pkg/"+fileName+".properties"));
于 2017-10-04T11:01:56.627 回答
1

您可以使用ServletContext.getResource(或getResourceAsStream) 使用相对于 Web 应用程序的路径访问资源(包括但不限于 下的那些WEB-INF)。

InputStream in = ctx.getResourceAsStream("/profiles/fille_001.properties");
if(in != null) {
  try {
    prop.load(in);
  } finally {
    in.close();
  }
}
于 2012-12-10T14:09:30.910 回答
1

正如 Stefan 所说,不要把它们放到 WEB-INF/... 所以把它们放到 WEB-INF/ 中,然后这样读取它们:

ResourceBundle resources = ResourceBundle.getBundle("fille_001");

现在您可以访问 fille_001.properties 中的属性。

于 2012-12-10T14:00:03.360 回答
0

You should use ServletContext.getResource. getResourceAsStream works locally for me but fails in Jenkins.

于 2013-12-03T01:12:23.650 回答
0

如果你真的必须,你可以对位置进行逆向工程。在捕获通用异常并记录 File.getPath() 之前捕获 FileNotFoundException,这会输出绝对文件名,您应该能够看到相对路径来自哪个目录。

于 2012-12-10T13:54:02.823 回答
-1

您可以使用

this.getClass().getClassLoader().getResourceAsStream("../../profiles/fille_001.properties")

基本上 Classloader 开始将资源查找到Web-Inf/classes文件夹中。因此,通过提供相对路径,我们可以访问web-inf文件夹之外的位置。

于 2016-01-21T11:22:20.700 回答