2010-12-19 30 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