我想使用 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);
这是一个好的做法吗?
不应删除这些文件,除非您在应用程序仍在运行时在展开的 WAR 中自己创建了这些文件。然后,当您重新部署 WAR 时,这些文件确实会被删除,因为它们不包含在原始 WAR 中。
通常的做法是将这些文件存储在 Web 应用上下文之外的固定路径中。 您绝对不应该为此使用 tmp/temp 文件夹。该文件夹符合基础平台定期清理的条件。例如使用 /var/webapp/upload
.正确记录它,以便服务器管理员事先创建它。如有必要,使其可由某些web.xml
参数进行配置。
或者,当环境不允许创建文件夹和/或写入磁盘时,最后最好的办法是将这些文件存储在 SQL 数据库中。