如何在Servlet的doPost()方法中在Tomcat服务器上创建文件?

时间:2014-05-18 02:39:01

标签: java servlets io

我正在尝试将包含来自http post请求的数据的String保存到我服务器上/ database目录中的新文件中。

public class TestIO {

    public static void main(String[] args) {
        try {
            File newFile = new File("database.txt");
            FileWriter fileWriter = new FileWriter(newFile);
            PrintWriter printWriter = new PrintWriter(fileWriter);
            printWriter.println("test");

            fileWriter.close();
            printWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

在项目根目录下创建一个文件database.txt,文本“test”就好了。但是,

@WebServlet("/TestIO")
public class TestIO extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //doGet
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            File newFile = new File("database.txt");
            FileWriter fileWriter = new FileWriter(newFile);
            PrintWriter printWriter = new PrintWriter(fileWriter);
            printWriter.println("test");

            fileWriter.close();
            printWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

什么都不做。没有创建文件,也没有抛出错误。

1 个答案:

答案 0 :(得分:2)

PrintWriter吞下例外情况,因此您可能错过了checkError().

但是,如果您还尝试FileWriter并且没有例外,答案是文件确实已创建 - 只是不在您预期的位置。例如,查看Tomcat bin目录。如果您希望在网络应用中的路径中创建它,则必须使用ServletContext.getRealPath()和朋友。

另一方面,如果你得到的是文件,原因在于:

fileWriter.close();
printWriter.close();

这是不正确的。您正在关闭FileWriter而没有给PrintWriter一个冲洗的机会,当您关闭PrintWriter时,它会尝试刷新并吞下异常。完全删除这两个关闭中的第一个。