簡體   English   中英

每次在Java中執行時都讀取屬性文件

[英]Reading Properties file every time in the execution in Java

給定我要部署的“ war”文件的以下目錄結構,我必須從“ ReadProp.java”類中讀取屬性文件“ MyProperty.properties”。

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

一切正常。 但是問題是,如果在加載應用程序后更改屬性文件,更改不會反映出來。

我可以隨時更改屬性文件的操作方法如果我希望更改應反映出來。 我的意思是應用程序應該每次在exexecutio中加載屬性文件

除非您啟動應用服務器,否則您將看不到任何更改。

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

您沒有說要在哪里閱讀代碼。 您可能必須實現Timer任務才能定期喚醒並重新加載.properties文件。

如果您使用的是JDK 7,也可以嘗試使用WatchService

自動重載Java中更改的文件

您需要為該示例鏈接使用java 7 WatchService

我得到了答案:

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

更新的方法是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM