2

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

如果我将 abreak放入该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();
    }
}
4

2 回答 2

1

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

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

然后你可以String line在你的代码中使用它。

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

参考:扫描仪

于 2013-10-31T18:26:32.380 回答
0

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

于 2013-10-31T18:20:01.303 回答