Я получаю ошибку java.util.NoSuchElementException. Мы получаем эту ошибку по следующим причинам.
- Если мы не проверяем, есть ли в файле следующая строка перед его чтением, то он выдает исключение после чтения последней строки, поскольку пытается прочитать несуществующую строку.
- Формат файла испорчен
Я думаю, что формат файла, который я использую, правильный, и я также проверяю следующую строку, прежде чем читать ее, но я все еще получаю сообщение об ошибке.
Когда я отлаживаю его с помощью оператора печати, он печатает всю строку и выдает ошибку java.util.NoSuchElementException
после прочтения последней строки.
Пожалуйста, помогите мне
Вот код:
public static void InterpretMessageFromFile() throws FileNotFoundException{
File inputfile = new File("filepath");
Scanner reader = new Scanner(inputfile);
try {
while (reader.hasNextLine()) {
String MessageType = reader.next();
int IsAdd = MessageType.compareToIgnoreCase("A");
int IsCancel = MessageType.compareToIgnoreCase("X");
int IsDelete = MessageType.compareToIgnoreCase("D");
int IsExecute = MessageType.compareToIgnoreCase("E");
int IsReplace = MessageType.compareToIgnoreCase("U");
//if the type of order is add order to existing Order Book
if (IsAdd == 0) {
String retrieve_ts = reader.next();
int ts = Integer.parseInt(retrieve_ts);
String retrieve_id = reader.next();
int id = Integer.parseInt(retrieve_id);
String or_side = reader.next();
String retrieve_share = reader.next();
int share = Integer.parseInt(retrieve_share);
String retrieve_price = reader.next();
int price = Integer.parseInt(retrieve_price);
System.out.println("Add Order : Id is " + id );
AddOrderToExistingBook.AddNewOrder(id, ts, or_side, share, price);
}
//if it is cancel order
if (IsCancel == 0){
String retrieve_ts = reader.next();
int ts = Integer.parseInt(retrieve_ts);
String retrieve_id = reader.next();
int id = Integer.parseInt(retrieve_id);
System.out.println("Cancel Order : Id is " + id + " time stamp is : " + ts );
CancelOrder.CancelPartOfOrder(id, ts);
}
}
}
}
finally {
reader.close();
}
}
Исключение (скопировано из комментариев):
Исключение в потоке «основной» java.util.NoSuchElementException в java.util.Scanner.throwFor(Scanner.java:907) в java.util.Scanner.next(Scanner.java:1416) в OrderBook.InterpretOrderBookUpdateMessage.InterpretMessageFromFile(InterpretOrde rBookUpdateMessage.java:20) в OrderBook.MainMethod.main(MainMethod.java:50)
println
после каждогоread.next()
, чтобы увидеть, где нет элемента. Вот что означает исключение... что сканеру нечего читать. - person Paul Samsotha   schedule 31.10.2013