代码之家  ›  专栏  ›  技术社区  ›  user2889968

读取文件时无限循环

  •  1
  • user2889968  · 技术社区  · 12 年前

    这是我试图从文件中读取的一段代码。我的文件目前有4行,但在读取这些行之后,代码不会从循环中出来。

        public class ViewServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        System.out.println("Logging in..");
        // retrieving values entered in form
        String uname = request.getParameter("uname");
        String pwd = (String) request.getParameter("pwd");
    
        if (uname.equals("admin") && pwd.equals("admin")) {
    
            try {
                viewDetails();
                System.out.println("Redirecting to view page..");
                response.sendRedirect("view.jsp");
            } catch (Exception e) {
    
            }
        } 
            }
    
    public void viewDetails() throws Exception{
        System.out.println("Reading Data..");
        BufferedReader input = new BufferedReader(new FileReader("H:/Workspace/teamRecordsApp/WebContent/records.txt"));
        String record;
        String[] split =new String[5];
    
        ArrayList cuid = new ArrayList();
        ArrayList fname = new ArrayList();
        ArrayList lname = new ArrayList();
        ArrayList mobile = new ArrayList();
        ArrayList desk = new ArrayList();
        int count = 0;
        while((record=input.readLine()) != null){
            split = record.split(",");
            System.out.println("Record is : "+split[0]+","+split[1]+","+split[2]+","+split[3]+","+split[4]);
            cuid.add(split[0]);
            fname.add(split[1]);
            lname.add(split[2]);
            mobile.add(split[3]);
            desk.add(split[4]);
            count = count+1;
    
        }
        input.close();
        System.out.println("Reading Done...");
        Utils utils = new Utils();
        utils.setCuid(cuid);
        utils.setFname(fname);
        utils.setLname(lname);
        utils.setMobile(mobile);
        utils.setDesk(desk);
        utils.setCount(count);
        System.out.println("Total records : "+count);
    
    
    }
    

    }

    *现在添加了整个servlet类。


    控制台显示:

    Logging in..
    Reading Data..
    Record is : 12,e,e,1234567890,1234
    Record is : 12,e,e,1234567890,1234
    Record is : 12,e,e,1234567890,1234
    

    记录为:12,e,e,1234567890123

    在文件中添加printStackTrace()后,我得到的异常附在下面。正如@Pshemo所说,最后一行是空的,给出了这个例外。我无法通过查看文件并添加printStackTrace来解决这个问题。非常感谢@Pshemo和其他人的帮助!

    java.lang.ArrayIndexOutOfBoundsException: 1
    at ViewServlet.viewDetails(ViewServlet.java:54)
    at ViewServlet.doPost(ViewServlet.java:31)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Pshemo    12 年前

    由于您调用 viewDetails(); 在try-catch块中,但您不处理异常(甚至不打印其堆栈跟踪)

    } catch (Exception e) {
        //nothing here... :/
    }
    

    我想这个异常是在你的循环中抛出的 "Reading Done..." 按摩。异常可能是由许多事情引起的,比如如果你的文件有空行,你会读取它 "" 并将其拆分 , 这将创建一个元素数组 {""} 然后使用 split[1] 你可以得到 IndexOutOfBoundException 。但这只是其中一种可能性。要确定您的代码有什么问题,请添加

    e.printStackTrace(); 
    

    给你 catch (Exception e)