2012-09-21 28 views
0

我必須從「ReadProp.java」類中讀取屬性文件「MyProperty.properties」,給出我將要部署的「war」文件的以下目錄結構。每次在Java中執行時讀取屬性文件

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

我打算在「Sun門戶服務器」中部署這個「war」文件。但由於需求規格的原因,我不應該改變這個目錄結構。

我讀這個文件以下列方式

 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"); 

這是工作的罰款。但問題是如果我加載應用程序後更改屬性文件的變化沒有反映。

我可以隨時更改屬性文件如何操作如果我希望更改應該體現出來。我的意思是應用程序應該每次在exexcutio中加載屬性文件

回答

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(); 
} 
0

除非您退回應用程序服務器,否則不會看到更改。

更好的選擇是將.properties文件放在/ WEB-INF/classes文件夾中,並使用getResourceAsStream()從CLASSPATH中讀取它。

你不說你在讀代碼的地方。您可能必須執行Timer任務才能定期喚醒並重新加載.properties文件。

你也可以嘗試一個WatchService,如果你正在使用JDK 7:

Auto-reload changed files in Java

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(); 
    }