从servlet中的文本文件读取和写入

时间:2013-12-22 11:35:19

标签: java jsp servlets netbeans

我想从我的jsp页面写一个字符串并将其存储在servlet中。如果用户再次输入相同的字符串,servlet会从文本文件中读取该字符串(如果存在),它会告诉字符串已经存储,如果不存在,则将该字符串写入文本文件中。

这是我的jsp代码,我的字符串称为“起始价格”

       <%@page contentType="text/html" pageEncoding="UTF-8"%>
       <!DOCTYPE html>
       <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1>Hello World!</h1>
            <form action="mona.java" method="POST">
                Name:<input type="text" name="Name"><br>
                Email:<input type="text" name="Email"><br>
                Item Name:<input type="text" name="Item Name"><br>
                Item Description:<input type="text" name="Item Description"><br>
                Starting Bid Price:<input type="text" name="Starting bid Price"><br>
                <input type="submit" value="submit">
            </form>
        </body>
        </html>

这是我的servlet代码。

import java.io.IOException;
import java.io.PrintWriter;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    String s1 = request.getParameter("Name");
    String s2 = request.getParameter("Email");
    String s3 = request.getParameter("Item Name");
    String s4 = request.getParameter("Item Description");
    String s5 = request.getParameter("Starting bid Price");

    try{

        File file = new File("c:/example/filedata.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
                    String temp = bufferedReader.readLine();
        while (temp != null) {
        if(s5.equals(temp)) 
                    {
                    out.println("file already exist");
        //fileReader.close();
                    }
                    else 
                    {
                    PrintWriter fileWriter = new PrintWriter(new    
       FileOutputStream("c:/example/filedata.txt",true));  
                    fileWriter.println( s5 );
                    out.println("file saved");
                     fileWriter.close(); 
                            }
                    fileReader.close();
                    }
                     }  
    catch(FileNotFoundException fnfe) {    

  }  
  finally{  


      }  

}

2 个答案:

答案 0 :(得分:2)

你的问题有点不清楚,但如果我理解得很好,你只需要让这段代码工作。

嗯,第一个问题是

String temp = bufferedReader.readLine();
while (temp != null) {

您的代码只读取文件的第一行,如果它不为null,则会在while循环中无休止地处理代码。

应该是这样的:

String temp = null;
while ((temp = bufferedReader.readLine()) != null) {
   // do your stuff here.

另一个可能的问题:

out.println("file already exist");

如果这应该在控制台上打印文本,它应该是

System.out.println("file already exist");

建议: 在处理诸如File之类的资源时,您应该在finally块中关闭流/读取器,因为如果在资源关闭之前发生异常,则资源仍然打开。

最后有一个意见。我个人不会将文件处理放在servlet中,它应该放在一些业务逻辑类中。然后我会从servlet第一个方法调用来测试,如果文件包含特定字符串,如果没有,我会调用另一个方法,它会将新行附加到现有文件。

如果您需要我的答案中未涵盖的其他内容,请指明一点。 希望它有所帮助。

修改 还有一点我注意到了。当你在你的文件中找到匹配时,你应该终止while循环(返回或中断),或者甚至更好,在循环之前将boolean变量定义为false,如果你在文件中找到你的匹配,将它设置为true并断开循环。 while循环结束后,测试变量是否为真,如果不是,则将行追加到文件中(不在while循环中)。

<强> EDIT2 是的,这是我上面提到的问题。

String temp = bufferedReader.readLine();
while (temp != null) {

如果第一行文件不为null,您将无休止地处理循环。

稍微修改你的代码,我建议遵循:

 boolean found = false;
 File file = new File("c:/example/filedata.txt");
 FileReader fileReader = new FileReader(file);
 BufferedReader bufferedReader = new BufferedReader(fileReader);
 while ((temp = bufferedReader.readLine()) != null) {
   if(s5.equals(temp)) {
     System.out.println("file already exist");
     found = true;
     break;
   }
 }
 if (!found){
    PrintWriter fileWriter = new PrintWriter(new    
    FileOutputStream("c:/example/filedata.txt",true));  
    fileWriter.println( s5 );
    System.out.println("file saved");
 }

答案 1 :(得分:0)

使用

HttpSession session= request.getSession();
session.setAttribute ("name", name);

为了在会话中保存数据,并且:

(String)session.getAttribute ("name");

将其取回