BufferedWriter не выдает никаких ошибок, но файл пустой

#java #file-io

#java #file-io

Вопрос:

Я новичок в использовании Java для веб-серверов, и я пишу очень простое приложение, которое записывает микро-сообщения в файл, который позже будет вызван и отображен. (Я знаю, что для этого лучше подойдет база данных, но это для назначения, и мы используем файловый ввод-вывод, чтобы упростить задачу.)

Вот метод в моем сервлете, который получает сообщение формы и записывает данные в мой файл:

     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);;
}
  

Комментарии:

1. Возникает ли какое-либо исключение, когда вы пытались записать или открыть файл.

2. @FrankZHENG Нет, вообще никаких ошибок.

3. Я сомневаюсь, что вы проверяете файл в правильном месте? Файл будет создан в проекте, в котором находится класс Java. В вашем коде нет ошибок. Дважды проверьте местоположение файла, который вы создаете.

4. можете ли вы сказать, какое значение имеет переменная path?

5. Я вижу, что ваш метод не обрабатывает IOException s . Возможно, что ваше создание a FileWriter вызвало a FileNotFoundException . Проверьте файл журнала на наличие сообщений и покажите нам, что вы это сделали.

Ответ №1:

Хорошо, теперь я чувствую себя довольно глупо. Он работал все время, но он записывал и считывал из файла в каталоге сервера, а не там, где хранится мой исходный код. Поэтому, когда я проверил текстовый файл, который я создал вручную, он не показал никаких изменений, потому что это был не используемый файл. Спасибо всем за вашу помощь и вклад, извините за трату вашего времени.