我想使用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);
这是一个好习惯吗?
答案 0 :(得分:1)
不应删除这些文件,除非您在应用程序仍在运行时在展开的WAR中创建自己。然后,在重新部署WAR时,确实会删除这些文件,因为它们不包含在原始WAR中。
通常的做法是将这些文件存储在webapp上下文之外的 fixed 路径中。你绝对不应该使用tmp / temp文件夹。该文件夹有资格由底层平台定期清理。例如,使用/var/webapp/upload
。正确记录,以便serveradmin预先创建它。如有必要,可以通过某些web.xml
参数进行配置。
或者当环境不允许创建文件夹和/或写入磁盘时,那么最后一个最好的办法就是将这些文件存储在SQL数据库中。