我对使用 Java 进行 Web 服务器是全新的,我正在编写一个非常基本的应用程序,它将微帖子写入文件,稍后将调用并显示该文件。 (我知道数据库对此会更好,但这是一个作业,我们使用文件 I/O 来使事情变得简单。)
这是我的 servlet 中接收表单发布并将数据写入我的文件的方法:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String content = request.getParameter("postContent");
Calendar cal = new GregorianCalendar();
int day = cal.get(Calendar.DAY_OF_MONTH);
int month = cal.get(Calendar.MONTH) + 1; //add one because the Calendar class numbers months 0-11
int year = cal.get(Calendar.YEAR);
int hour = cal.get(Calendar.HOUR);
int minutes = cal.get(Calendar.MINUTE);
String dateTime = Integer.toString(month) + "/" + Integer.toString(day) + "/" + Integer.toString(year) + " " + Integer.toString(hour) + ":" + Integer.toString(minutes);
String user = request.getSession().getAttribute("username").toString();
ServletContext servletContext = request.getSession().getServletContext();
String path = servletContext.getRealPath("/posts.txt");
//String path = getServletContext().getRealPath("/posts.txt");
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(path, true));
writer.write(user);
writer.newLine();
writer.write(dateTime);
writer.newLine();
writer.write(content);
writer.close();
}catch(IOException ex){
System.out.println(ex.getMessage());
}
response.sendRedirect("listPosts.jsp");
}
当我运行应用程序时,一切都很顺利,我最终重定向到 listPost.jsp
,但我的文件是空白的。我看过其他问题,但我正在做我所知道的一切正确的事情。我是否设置了 BufferedWriter 错误?我是否可以将 posts.txt 放在错误的位置? (它位于 WebContent 文件夹中)。
提前致谢。
更新
path
变量的值如下:
/home/[myusername]/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/forum/posts.txt
更新
我现在知道我可以从 posts.txt
中读取内容,因此这告诉我应用程序在查找它时没有遇到问题。
我正在使用以下代码读取文件:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = getServletContext().getRealPath("posts.txt");
BufferedReader reader = new BufferedReader(new FileReader(path));
String username = reader.readLine();
String dateTime = reader.readLine();
String postContent = reader.readLine();
reader.close();
request.setAttribute("username", username);
request.setAttribute("dateTime", dateTime);
request.setAttribute("postContent", postContent);
request.getRequestDispatcher("/listPosts.jsp").forward(request, response);;
}
最佳答案
好吧,所以我现在觉得自己很愚蠢。它一直在工作,但它是从服务器目录中的文件中写入和读取的,而不是我的源代码存储的位置。因此,当我检查手动创建的文本文件时,它没有显示任何更改,因为它不是正在使用的文件。感谢大家的帮助和意见,很抱歉浪费了您的时间。
关于java - BufferedWriter 不会抛出任何错误,但文件为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24443841/