0

鉴于我要部署的“war”文件的以下目录结构,我必须从“ReadProp.java”类中读取属性文件“MyProperty.properties”。

MyApp.war
 | ----MyProps 
 |     |--MyProperty.properties
 |---WEB-INF |   
     |--classes
          |---ReadProp.java 

我将在“Sun 门户服务器”中部署这个“战争”文件。但是由于需求规范,我不应该更改任何此目录结构。

我正在通过以下方式阅读此文件

     String path = servletContext.getRealPath("/MyProps/MyProperty.properties");         System.out.println("path: " + path);  
            Properties prop = new Properties();         
    try {           
             prop.load(new FileInputStream(path));
);
         } catch (Exception e) { 

                            e.printStackTrace();      
       }      
       String name= prop.getProperty("name"); 

它工作正常。但问题是如果我在加载应用程序后更改属性文件,这些更改不会反映。

我可以随时更改属性文件怎么办如果我希望应该反映更改。我的意思是应用程序应该在每次执行时加载属性文件

4

4 回答 4

0

除非您退回应用服务器,否则您不会看到更改。

更好的选择是将 .properties 文件放在 /WEB-INF/classes 文件夹中,然后使用getResourceAsStream().

你没有说你在哪里阅读代码。您可能必须执行一项Timer任务来定期唤醒并重新加载 .properties 文件。

WatchService如果您使用的是 JDK 7,您也可以尝试:

在 Java 中自动重新加载更改的文件

于 2012-09-21T11:36:15.867 回答
0

您需要WatchService 为该示例链接使用 java 7

于 2012-09-21T11:36:55.113 回答
0

我得到了答案:

String path = servletContext.getRealPath("/MyProps/MyProperty.properties");       
System.out.println("path: " + path);      
Properties prop = new Properties();       
try {      
   File f = new File(path);      
   FileInputStream fis = new FileInputStream(f);     
   prop.load(fis);    
}
catch (Exception e) {   
   e.printStackTrace();   
}
于 2012-09-21T13:38:00.307 回答
0

较新的方法是:

    Path path;
    try {
        path = Paths.get("MyProperty.properties");
        if (Files.exists(path)) {
            props = new Properties();
            props.load(Files.newInputStream(path));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
于 2016-06-01T13:17:59.997 回答