使用getSystemResource从servlet访问文件

时间:2011-05-19 13:29:58

标签: java servlets file

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

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

如果我将文件放在build/web文件夹中,它会起作用,但是当我清理并构建项目时,所有文件都会被删除。我应该把文件放在哪里?

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

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

这是一个好习惯吗?

1 个答案:

答案 0 :(得分:1)

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

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

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