我写了一个程序来读取文件。它正确读取文件。我使用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();
}
}
答案 0 :(得分:1)
在处理文件读取操作时,检查几个条件总是好的 - 1)文件是否有下一行? 2)下一行是否为空。
while (reader.hasNextLine() && (line = reader.nextLine()) != null)
然后您可以在代码中使用此String line
。
在您的代码中,虽然您通过reader.next()
获得了下一个值,但它不会使指针前进。这就是循环永不退出的原因。
参考:Scanner
答案 1 :(得分:0)
最后一个else块实际上并不消耗该行。因此,如果在输入的最后一行实际数据之后有任何字符,程序将始终有下一行。尝试一次使用一行文件,然后使用String.split()
获取每行中的各个令牌。这可以保证您将使用文件中的每一行。