Java,文件阅读器,进入无限循环

时间:2013-10-31 18:11:03

标签: java infinite-loop

我写了一个程序来读取文件。它正确读取文件。我使用print语句测试过。但在阅读文件中的最后一行后,程序不会停止。它进入了一个无限循环。我猜我的while循环一直在读空白字符作为下一行。我不知道如何解决它。

如果我在break部分放置else,它只会读取第一行并突破while循环。我不知道为什么。

请帮帮我。

以下是代码:

public static void InterpretMessageFromFile() throws FileNotFoundException{
    File inputfile = new File("FilePath");
    Scanner reader = new Scanner(inputfile);

try
    {
        while (reader.hasNextLine())
        {
            //if the type of order is add order to existing Order Book
            if (reader.hasNext("A")){

                reader.next();
                String retrieve_ts = reader.next();
                int ts = Integer.parseInt(retrieve_ts);
                //int ts = Integer.parseInt(retrieve_ts, 2); //for binary file
                String retrieve_id = reader.next();
                int id = Integer.parseInt(retrieve_id);
                //int id = Integer.parseInt(retrieve_id ,2); // for binary file
                String or_side = reader.next();
                String retrieve_share = reader.next();
                int share = Integer.parseInt(retrieve_share);
            //  int share = Integer.parseInt(retrieve_share, 2); //for binary file
                String retrieve_price = reader.next();
                int price = Integer.parseInt(retrieve_price);
                //int price = Integer.parseInt(retrieve_price, 2); //for binary file
                System.out.println("Add Order : Id is " + id );
                AddOrderToExistingBook.AddNewOrder(id, ts, or_side, share, price);
            }

            //if it is cancel order
            else if (reader.hasNext("X")){

                reader.next();
                String retrieve_ts = reader.next();
                int ts = Integer.parseInt(retrieve_ts);
                //int ts = Integer.parseInt(retrieve_ts, 2); //for binary file
                String retrieve_id = reader.next();
                int id = Integer.parseInt(retrieve_id);
                System.out.println("Cancel Order : Id is " + id + " time stamp is : " + ts );
                //int id = Integer.parseInt(retrieve_id, 2); //for binary file
                //String retrieve_share = reader.next();
            //  int share = Integer.parseInt(retrieve_share, 2); // need to add back later, removing it for testing purposes
                CancelOrder.CancelPartOfOrder(id, ts);
            }

            //if it is delete order
            else if (reader.hasNext("D")){

                reader.next();
                String retrieve_ts = reader.next();
                int ts = Integer.parseInt(retrieve_ts, 2);
                String retrieve_id = reader.next();
                int id = Integer.parseInt(retrieve_id, 2);

                DeleteOrder.DeleteOrderFromBook(id, ts);


            }
            else{
                 // unexpected token.  
                // basically log as info and ignore.
            }
        } 
    }
    finally
    {
        reader.close();
    }
}

2 个答案:

答案 0 :(得分:1)

在处理文件读取操作时,检查几个条件总是好的 - 1)文件是否有下一行? 2)下一行是否为空。

while (reader.hasNextLine() && (line = reader.nextLine()) != null) 

然后您可以在代码中使用此String line

在您的代码中,虽然您通过reader.next()获得了下一个值,但它不会使指针前进。这就是循环永不退出的原因。

参考:Scanner

答案 1 :(得分:0)

最后一个else块实际上并不消耗该行。因此,如果在输入的最后一行实际数据之后有任何字符,程序将始终有下一行。尝试一次使用一行文件,然后使用String.split()获取每行中的各个令牌。这可以保证您将使用文件中的每一行。