2011-05-19 59 views
1

我想使用getSystemResource访问来自servlet的文件。这些文件驻留在项目本身和硬盘上。对于项目中的文件,我用:使用getSystemResource访问servlet中的文件

ServletContext ctx = getServletContext(); 
    InputStream is = ctx.getResourceAsStream("/testing.txt"); 

它的工作原理,如果我把这些文件放在文件夹build/web,但是当我清理并生成项目中的所有文件都将被删除。我应该在哪里放置文件?

对于项目之外的文件,我使用的文件对象:

File file = new File("c://tmp//testing.txt"); 
InputStream is= new FileInputStream(file); 

这是一个好的做法呢?

+1

路径中不需要双正斜杠。新的文件(“c:/tmp/testing.txt”)就足够了。 – 2011-05-19 13:33:10

+0

@Matt Ball,好的,对于你的建议thanx。 – palAlaa 2011-05-19 13:44:22

+0

“你”是一个美索不达米亚的城市。你可能打算说“你的”?请尽量写出适当的英文。这不是disney.com或东西:) – BalusC 2011-05-19 13:52:17

回答

1

这些文件不应该被删除,除非您在应用程序仍在运行时在展开的WAR中自己创建它们。然后,在重新部署WAR时,这些文件确实会被删除,因为它们不包含在原始WAR中。

通常的做法是将这些文件存储在固定的路径之外的webapp上下文中。你绝对不应该为此使用tmp/temp文件夹。该文件夹有资格定期由底层平台清理。使用例如/var/webapp/upload。正确记录,以便serveradmin能够事先创建它。如有必要,可以通过一些web.xml参数进行配置。

或者当环境不允许创建文件夹和/或写入磁盘时,最后的最佳方法是将这些文件存储在SQL数据库中。

+0

是的,我手动创建的文件。实际上,我不喜欢保存在db中的大文件,在我正在处理的情况下。我会将文件名保存在数据库中,并将文件保存在硬盘中,因为我有很多种文件,jpg,pdf,txt和其他文件,然后使用第二种方法访问资源,这是一种好方法吗? – palAlaa 2011-05-19 13:43:30

+1

是的,你可以这样做。在DB中存储名字非常好。它允许快速搜索,并且还可以存储内容类型和其他元数据。 – BalusC 2011-05-19 13:53:00