我使用java和jsf,我想在服务器中创建一个文件夹,然后临时保存文件并在之后删除它(不是文件夹本身)。 我试过这段代码:
boolean folderPath;
folderPath = new File ("/Images").mkdir();
但上面的代码在我的本地磁盘中创建了该文件夹。
答案 0 :(得分:3)
不要那样做。您永远不能保证WAR文件夹是可写的,甚至不能保证在物理磁盘上。例如,当servletcontainer配置为将WAR扩展到内存而不是磁盘时。
因为它显然是一个临时文件,而只是使用File#createTempFile()
:
File tempFile = File.createTempFile("filename", ".png");
// ...
或者在固定磁盘文件系统上使用外部文件夹,其绝对路径将设置为VM参数或某些配置设置。
更新:您可以使用servlet来显示该文件。我知道这是一个图像文件。您可以使用<h:graphicImage>
,其中您在路径中设置临时文件的文件名。
E.g。在bean里面:
this.filename = tempFile.getName();
然后在视图中:
<h:graphicImage value="images/#{bean.filename}" />
应该在/images/*
上监听的servlet可能如下所示(练习中省略了特殊检查):
@WebServlet("/images/*")
public class ImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
File file = new File(System.getProperty("java.io.tmpdir"), request.getPathInfo());
response.setHeader("Content-Type", getServletContext().getMimeType(file.getName()));
response.setHeader("Content-Length", String.valueOf(file.length()));
InputStream input = new FileInputStream(file);
OutputStream output = response.getOutputStream();
// Now write input to output the usual way.
}
}
答案 1 :(得分:0)
使用Primefaces,我使用它:
导入此内容:
import javax.faces.context.ExternalContext;
然后是主要课程:
String resultFolder =“newFolder”;
ExternalContext extContext = FacesContext.getCurrentInstance()。getExternalContext();
档案结果=新 文件(extContext.getRealPath(“// WEB-INF //”+ resultFolder).mkdir();