java - 在servlet中读取和写入文本文件

标签 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{  


      }  

}

最佳答案

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

嗯,第一个问题是

String temp = bufferedReader.readLine();
while (temp != 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");

建议: 在处理文件等资源时,您应该在finally block 中关闭流/读取器,因为如果在资源关闭之前发生异常,资源将保持打开状态。

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

如果您需要我的答案中未涵盖的其他内容,请详细说明。 希望对您有所帮助。

编辑 我还注意到一件事。当您在文件中找到匹配项时,您应该终止 while 循环(return 或 break),或者更好的是,在循环之前将 boolean 变量定义为 false,如果您在文件中找到匹配项,请将其设置为 true 并中断循环。 while 循环结束后,测试变量是否为 true,如果不是,则将您的行追加到文件中(不在 while 循环中)。

编辑2 是的,就是我上面提到的问题。

String temp = bufferedReader.readLine();
while (temp != 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");
 }

关于java - 在servlet中读取和写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728953/

相关文章:

java - 如何使用 JSP、Java Bean 和 Servlet 填充 JSP 表

Java servlet - 从子页面转发/重定向

java - Web APP中添加Service层,在jsp上显示DB内容

java - Java 中的两条腿 OAuth2 示例?

java - 将类本身作为其构造函数的唯一参数

java - 数据(BLOB)插入到mySql(jsp,servlet)后修改

servlets - 将 EJB 作为实例变量注入(inject)到 servlet 中是否安全?

Java URLConnection 整数问题

java - Google Protocol Buffers 在网络软件中的作用

jsp - 如何使用 Maven war 插件在 war 之间重用 war 资源