我是将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:字节码和二进制有什么区别? - javajava字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在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? 参考方案 我不会在这里提及精度问题,而只会提及数字…