我正在尝试将包含来自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();
}
}
}
什么都不做。没有创建文件,也没有抛出错误。
答案 0 :(得分:2)
PrintWriter
吞下例外情况,因此您可能错过了checkError().
但是,如果您还尝试FileWriter
并且没有例外,答案是文件确实已创建 - 只是不在您预期的位置。例如,查看Tomcat bin
目录。如果您希望在网络应用中的路径中创建它,则必须使用ServletContext.getRealPath()
和朋友。
另一方面,如果你得到的是空文件,原因在于:
fileWriter.close();
printWriter.close();
这是不正确的。您正在关闭FileWriter
而没有给PrintWriter
一个冲洗的机会,当您关闭PrintWriter
时,它会尝试刷新并吞下异常。完全删除这两个关闭中的第一个。