【发布时间】: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");
}
【问题讨论】:
-
您不会在循环中拆分刚刚读取的字符串,因此
userName和passWord永远不会改变。您还在循环中阅读了两次,因此您将错过每一行。为什么要对它们进行两次测试是另一个谜。 -
您也没有关闭阅读器 - 使用“try-with-resources”块。使用
Files.readAllLines比BufferedReader简单很多
标签: java bufferedreader