java web中關於修改xml後讀取值的問題

tianhandigeng發表於2010-11-21
java web專案中我用xml檔案來儲存選單,選單如下:

<?xml version="1.0" encoding="gbk"?> 
<menus> 
   <frontmenus> 
      <menu id="1">
            <name>首頁</name> 
            <href>index.jsp</href> 
            <display>1</display> 
     </menu> 
  </frontmenus> 
</menus>
<p class="indent">


修改xml中的display值使其可以動態顯示

讀取xml的類如下:

   1. public class Front {  
   2.     public Map<String, String> readXML() {  
   3.         Map<String, String> menus = new LinkedHashMap<String, String>();  
   4.         SAXBuilder builder = new SAXBuilder();  
   5.         InputStream in=null;  
   6.         try {  
   7. //第一種方式 Resource resource=new ClassPathResource("menus.xml");  
   8. //          in=resource.getInputStream();  
   9. //          Document doc=builder.build(in);  
  10.               
  11. //第二種方式 Document doc = builder.build(Front.class.getClassLoader()  
  12. //                  .getResourceAsStream("menus.xml"));  
  13.               
  14.             File file=new File("E:\\my\\menus.xml");  
  15.             in=new FileInputStream(file);  
  16.             Document doc=builder.build(in);  
  17.               
  18.             Element element = doc.getRootElement();  
  19.             List l = element.getChildren("frontmenus");  
  20.             for (int i = 0; i < l.size(); i++) {  
  21.                 Element e1 = (Element) l.get(i);  
  22.                 List menuList = e1.getChildren("menu");  
  23.                 for (int j = 0; j < menuList.size(); j++) {  
  24.                     Element e2 = (Element) menuList.get(j);  
  25.                     String name = e2.getChildText("name");  
  26.                     String href = e2.getChildText("href");  
  27.                     String display = e2.getChildText("display");  
  28.                     if ("1".equals(display)) {  
  29.                         menus.put(href, name);  
  30.                     }  
  31.                 }  
  32.             }  
  33.         } catch (Exception e) {  
  34.             System.err.println("Error create XML parser");  
  35.         }  
  36.         return menus;  
  37.     }  
  38. }  
<p class="indent">


因為我剛開始做的時候是把xml檔案發在類路徑下,所以我選擇了第一種方式或第二種方式讀取
這是測試程式碼:

1. Front front=new Front();
2. Map<String,String> frontMenus=front.readXML(); 
3. 
4. Iterator it=frontMenus.entrySet().iterator(); 
5. while(it.hasNext())
  { 
6.   System.out.println(it.next()); 
7. }


<p class="indent">

但是使用第一種方式和第二種方式讀取的時候,當xml檔案中的內容改變了以後,再去讀取如果不重新啟動的話,讀取的值還是以前讀取的,也就是說沒改變,但是用debug測試的時候,顯示修改後再去讀取是重新執行了讀取方法的,無賴之下,用第三種方式測試了一下,這次沒把xml放到類路徑下,而是直接放到了專案資料夾下,使用了絕對路徑的方式,這次卻可行,修改後可以讀出修改後的值,為什麼會出現這種情況,百思不得期解,無賴之下請教各位大俠

相關文章