【问题标题】:How do I read the next line BufferedReader?如何阅读下一行 BufferedReader?
【发布时间】:2021-10-23 02:43:20
【问题描述】:

我遇到了一个问题,在我检索到第一行后它没有读取下一行。主要问题是,在我从 txt 文件中获取第一行数据后,基本上是这样的:

admin,password  
nameone,passtwo  
nametwo,passthree   

等等。等等

我遇到的问题是它在admin,password 之后无法读取。如何解决这个问题?

else if (userName.equals(u) && passWord.equals(p)) {  
    http.setAttribute("username", userName);  
    getServletContext().getRequestDispatcher("/WEB-INF/inventory.jsp").forward(request, response);

那行代码应该在第一行之后读取数据,但我不太确定如何修复它。任何帮助,将不胜感激。谢谢!

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpSession http = request.getSession();

        String path = getServletContext().getRealPath("/WEB-INF/users.txt");
        BufferedReader br = new BufferedReader(new FileReader(new File(path)));

        String userName = request.getParameter("username");
        String passWord = request.getParameter("password");

        String account = br.readLine();
        String split[] = account.split(",");

        int i = 0;
        String u = split[i];
        String p = split[i + 1];

        while ((account = br.readLine()) != null) {

            if (userName.equals(u) && passWord.equals(p)) {
                http.setAttribute("username", userName);
                getServletContext().getRequestDispatcher("/WEB-INF/admin.jsp").forward(request, response);
                // response.sendRedirect("inventory");
            } else if (userName.equals(u) && passWord.equals(p)) {
                http.setAttribute("username", userName);
                getServletContext().getRequestDispatcher("/WEB-INF/inventory.jsp").forward(request, response);
            } else {
                request.setAttribute("message", "The wrong username or password have been entered.");
                getServletContext().getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
            }
            account = br.readLine();
        }

        HttpSession session = request.getSession();
        session.setAttribute("username", userName);
        response.sendRedirect("inventory");
    }



【问题讨论】:

  • 您不会在循环中拆分刚刚读取的字符串,因此userNamepassWord 永远不会改变。您还在循环中阅读了两次,因此您将错过每一行。为什么要对它们进行两次测试是另一个谜。
  • 您也没有关闭阅读器 - 使用“try-with-resources”块。使用Files.readAllLinesBufferedReader 简单很多

标签: java bufferedreader


【解决方案1】:
 while ((account = br.readLine()) != null) {
            account = br.readLine(); //duplicated here.
        }

从您的代码中,您 readLine 两次。您应该删除 end 命令。

 while ((account = br.readLine()) != null) {             
        }

够了。您可以打印帐户进行调试,以确保您是否怀疑数据。

顺便说一句,两个if条件是一样的。请重构您的代码...

【讨论】:

    【解决方案2】:

    您永远不会刷新实际值,只读取该行而不对它们做任何事情。修复:

     protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            HttpSession http = request.getSession();
    
            String path = getServletContext().getRealPath("/WEB-INF/users.txt");
            BufferedReader br = new BufferedReader(new FileReader(new File(path)));
    
            String userName = request.getParameter("username");
            String passWord = request.getParameter("password");
    
            String account = "", u = "", p = "";
    
            while ((account = br.readLine()) != null) {
            String split[] = account.split(",");
    
            int i = 0;
            u = split[i];
            p = split[i + 1];
    
                if (userName.equals(u) && passWord.equals(p)) {
                    http.setAttribute("username", userName);
                    getServletContext().getRequestDispatcher("/WEB-INF/admin.jsp").forward(request, response);
                    // response.sendRedirect("inventory");
                } else if (userName.equals(u) && passWord.equals(p)) {
                    http.setAttribute("username", userName);
                    getServletContext().getRequestDispatcher("/WEB-INF/inventory.jsp").forward(request, response);
                } else {
                    request.setAttribute("message", "The wrong username or password have been entered.");
                    getServletContext().getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
                }
                account = br.readLine();
            }
    

    【讨论】:

      【解决方案3】:

      我建议你真的想检查一下 BufferedReader 是否不起作用。 处理这段代码。我认为如果代码很复杂,你最好对部分进行测试。

      public static void main(String[] args) throws IOException {
          String path = "useres.txt";
          File file = new File(path);
          FileReader fr = new FileReader(file);
      
          BufferedReader br = new BufferedReader(fr);
      
          String account = null;
          while ((account = br.readLine()) != null) {
              System.out.println(account);
          }
      
          br.close();
      }
      

      输出是

      admin,password
      nameone,passtwo
      nametwo,passthree
      etc,etc
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-07
        • 2015-05-14
        • 2015-08-27
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多