我在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”文件夹中读取文件?
答案 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.getResource
。 getResourceAsStream
在我本地工作但在Jenkins中失败。
答案 5 :(得分:-1)
您可以使用
this.getClass().getClassLoader().getResourceAsStream("../../profiles/fille_001.properties")
基本上,Classloader开始在Web-Inf/classes
文件夹中查找资源。因此,通过提供相对路径,我们可以访问web-inf
文件夹之外的位置。