#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 . Возможно, что ваше создание aFileWriter
вызвало aFileNotFoundException
. Проверьте файл журнала на наличие сообщений и покажите нам, что вы это сделали.
Ответ №1:
Хорошо, теперь я чувствую себя довольно глупо. Он работал все время, но он записывал и считывал из файла в каталоге сервера, а не там, где хранится мой исходный код. Поэтому, когда я проверил текстовый файл, который я создал вручную, он не показал никаких изменений, потому что это был не используемый файл. Спасибо всем за вашу помощь и вклад, извините за трату вашего времени.