BufferedWriter不会引发任何错误,但是文件为空 - java

我是将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:从文件系统加载资源 - java

我的项目设定我有以下项目设置:\program.jar \images\logo.png 在我的代码中,我使用相对URL "images/logo.png"引用图像。问题如果我在目录中使用以下命令运行此程序:c:\projects\program_dir\bin\>java -jar program.jar 然后一切正常,Java能…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

对于Java中的isDirectory和isFile,文件始终返回false - java

为什么file为isFile()方法返回false,即使它是file。当它是目录时,它为isDirectory()返回false。难道我做错了什么?我测试的这些文件/目录不存在,我需要创建它们,所以这就是为什么我要测试使用createFile()还是mkdir()的原因。File file = new File("C:/Users/John/Des…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…