java - 如何在服务器 (Tomcat 7) 内创建文件夹?

标签 java jsf-2

我使用java和jsf,我想在服务器中创建一个文件夹,然后临时保存文件并随后删除它(不是文件夹本身)。 我已经尝试过这段代码:

boolean folderPath;
folderPath = new File ("/Images").mkdir();

但是上面的代码在我的本地磁盘中创建了该文件夹。

最佳答案

不要那样做。您永远无法保证 WAR 文件夹可写,甚至无法保证在物理磁盘上。例如,当 servlet 容器配置为将 WAR 扩展到内存而不是磁盘时。

因为它显然是一个临时文件,所以只需使用 File#createTempFile() :

File tempFile = File.createTempFile("filename", ".png");
// ...

或者使用固定磁盘文件系统上的外部文件夹,其绝对路径将设置为虚拟机参数或某些配置设置。

<小时/>

更新:您可以使用 servlet 来显示该文件。我猜这是一个图像文件。您可以使用<h:graphicImage>其中您在路径中设置临时文件的文件名。

例如 bean 里面:

this.filename = tempFile.getName();

然后在 View 中:

<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.
    }

}

关于java - 如何在服务器 (Tomcat 7) 内创建文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734450/

相关文章:

java - 如何切换到单击按钮后打开的新浏览器窗口?

JSF 为 h :selectOneMenu (if nothing selected) 自定义验证消息

jsf-2 - 在 primefaces 中突出显示托管 bean 中选定的节点

java - `Java` `List` 方法 `size` 是如何工作的?

java - 多行 lambda

java - Java(Eclipse)调用MySQL存储过程OUT参数错误

java - 为什么我可以将立即评估 ${bean.property} 与可写属性一起使用?

dynamic - 以编程方式在支持 bean 中创建和添加复合组件

jsf - h :commandbutton vs h:commandlink

java - JComboBox 下拉时出现错误 - Java