Может случиться так, что в вашей локали ожидается, что double будет использовать запятые в качестве десятичного разделителя.Вы можете попробовать
Scanner inputbook = new Scanner(new File("book.txt"));
inputbook.useLocale(Locale.US);
и посмотреть, изменит ли это что-нибудь.Я также добавил бы
while(inputbook.hasNext()){
id = inputbook.nextInt();
System.out.println("id=" + id);
name = inputbook.next();
System.out.println("name=" + name);
year = inputbook.nextInt();
System.out.println("year=" + year);
price = inputbook.nextDouble();
System.out.println("price=" + price);
Таким образом, вы будете знать, какой была последняя успешно прочитанная переменная, и вам будет легче определить, что пошло не так.