如何从文件夹中读取WEB-INF文件夹外的文件?

时间:2012-12-10 13:50:12

标签: java

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

-conf
- 图像
-META-INF
-profiles
-WEB-INF

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

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”文件夹中读取文件?

6 个答案:

答案 0 :(得分:1)

正如Stefan所说,不要把它们放到WEB-INF / ...所以把它们放到WEB-INF /然后以这种方式阅读它们:

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

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

答案 1 :(得分: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();
  }
}

答案 2 :(得分:1)

如果文件在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"));

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您应该使用ServletContext.getResourcegetResourceAsStream在我本地工作但在Jenkins中失败。

答案 5 :(得分:-1)

您可以使用

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

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