2010-12-19 28 views
0

我正在使用以下代碼從Tomcat容器中的servlet寫入文件。如果在每次部署期間文件被覆蓋,我不用擔心。從servlet內部寫入文件(部署者:Tomcat)

但是,文件寫入不成功(它不會寫入硬盤)。而且,沒有任何異常被抓住! Tomcat中是否存在一些防止文件被寫入的安全措施?

+0

你是什麼意思, 「不成功」? – skaffman 2010-12-19 09:44:53

+0

servlet完成其操作後,該文件不在硬盤上。 – bikashg 2010-12-19 09:48:43

+0

您是否在任何地方捕捉到其他異常? WEB-INF文件夾是一個受保護區域,所以它有可能被寫保護 – Codemwnci 2010-12-19 10:03:26

回答

2

您的代碼在文件名開頭傳遞給getRealPath()時,同時具有「/」和windows文件分隔符,Java根據當前操作系統解釋文件名中的斜槓。

不使用文件分隔符可能會給一個更好的結果:

String filename = getServletContext().getRealPath("/WEB-INF/XML.xml"); 

log.debug("Using XML file: " + filename); 

xml_out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename),"UTF8")); 

使用單獨的變量名可以登錄,所以你可以看到去開發過程的早期意想不到的效果。

+0

這也沒用!我不知道你是如何使用log.debug方法的?在java中記錄一個標準類,或者我必須下載一些包才能使用它? – bikashg 2010-12-19 10:19:14

+0

@Bikash,你可以使用'java.util.logging.Logger'的一個實例或者使用log4j庫作爲實例(或者暫時簡單地使用'System.out'),你可以在不同的位置你期望什麼。 – rsp 2010-12-19 10:54:10

+0

是的,該文件被寫入其他地方。我檢查了它,並編輯了路徑名以獲得正確的目的地。謝謝。 – bikashg 2010-12-19 13:02:06

0

我有同樣的問題。 this鏈接幫助我瞭解文件在硬盤中的位置。
特別對我來說,它把文件由該行返回的位置:

System.getProperty(「user.dir來」);

在我的情況,地點是:C:\用戶\我自己\程序\ Eclipse進行Java