簡體   English   中英

無限循環讀取文件

[英]Infinite Loop while reading a file

這是我試圖從文件中讀取的代碼。 我的文件當前有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,1234567890,123

在文件中添加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)

由於您調用viewDetails(); 在try-catch塊中,但您不處理異常(甚至不打印其堆棧跟蹤)

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

我認為在"Reading Done..."按摩之前,您的循環中已引發異常。 異常可能是由許多情況引起的,例如,如果文件中有一些空行,則循環將其讀取為""並將其拆分為,這將創建一個元素數組{""} ,然后使用split[1]獲取IndexOutOfBoundException 但這只是可能性之一。 為了確保您的代碼出了什么問題,請添加

e.printStackTrace(); 

到您的catch (Exception e)塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM