java - BufferedWriter 不会抛出任何错误,但文件为空

标签 java file-io

我对使用 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/

相关文章:

java - Java 中的回调(代码解释)

java - 买车程序-需要用JButton计算最终价格

java - Jenkins Maven 构建未选择 Java 主页

Java 检测按键何时被按下

json - 如何在没有域类的grails中使用elasticSearch索引数据

java - 让 Swing 操作变得即时

c++ - 为什么 ifstream 阅读器只读取图像文件的前 10 个字节?

python - 简单的嵌套 for 循环无法正常工作

c# - 如何将两个文本(.txt)文件合并为一个文件并区分相同的内容?

c# - 获取多个 FileInfo 的更快方法?