2013-03-04 79 views
-1

我有一組文件,將由servlet根據參數提供。 servlet將流打開到所需的文件,讀取,寫入http響應並關閉流。現在這個文件可以手動修改並保存。然後下一次對這個文件發出請求時,servlet會打開一個流到這個文件的流,將它寫入響應,但是我看到這個內容不是修改過的內容,它是舊的。java:文件讀取,修改外部,然後再次讀取,修改未見

如果我重新啓動tomcat,servlet會響應修改後的內容。是否可以在不重新啓動的情況下讀取修改後的內容?

它不是tomcat緩存,從文件讀取器本身讀取的字符串不變。

謝謝!

這裏的servlet-

InputStream fhandle=this.getClass().getClassLoader().getResourceAsStream("responses/"+file); 

     if(fhandle!=null){ 
      Reader fr=new InputStreamReader(fhandle); 
      PrintWriter out=resp.getWriter(); 
      int a=-1; 
      FileWriter fos=new FileWriter("copyFile.xml"); //to compare what's read with actual file 
      while((a=fr.read())>=0){ 
       fos.write(a); 
       out.write(a); 
      } 
      out.flush(); 
      fos.close(); 
      fr.close(); 
      fr=null; 
      fhandle.close(); 
      fhandle=null; 
      System.gc(); 
     } 
     else 
      System.out.println(file+" not found"); 

的內容擊中了第一次的servlet後,我將編輯該文件並保存它。現在我再次爲同一個文件命中同一個servlet,並且我不會獲得編輯的內容。

+1

你可以提供更多關於文件修改的代碼嗎?這種錯誤的正常問題可能是你忘記關閉文件流後修改 – 2013-03-04 08:22:56

回答

1

當關聯文件發生更改時,不會動態重新加載資源。資源是源代碼樹的一部分,與應用程序一起分發。他們預計不會改變。如果您需要這種行爲,那麼您的設計存在嚴重問題。

+0

嗨,謝謝你的回答。這裏你的意思是說,一旦讀取的文件不再被讀取,內容來自某處? – Murali 2013-03-04 09:12:09

+0

@Murali我不知道還有什麼'不動態重新加載'可能意味着什麼。 – EJP 2013-03-04 09:13:54

+0

重裝到哪裏?工作目錄不是它加載文件的地方,因爲我在刪除它之後嘗試過,仍然內容相同。 – Murali 2013-03-04 09:42:46

相關問題