2014-09-15 2 views
-2

У меня возникла ошибка при чтении файла из .dat. Файл .dat настроен следующим образом:Ошибки при попытке чтения из .dat-файла

<Name>/<age> 

и я использую/в качестве разделителя. Я пытаюсь читать из файла, чтобы прочитать имя и возраст, но он приходит с этой ошибкой:

Exception in thread "main" java.util.InputMismatchException 
     at java.util.Scanner.throwFor(Scanner.java:819) 
     at java.util.Scanner.next(Scanner.java:1431) 
     at java.util.Scanner.nextInt(Scanner.java:2040) 
     at java.util.Scanner.nextInt(Scanner.java:2000) 
     at Lab04a.input(Lab04a.java:26) 
     at Lab04a.main(Lab04a.java:18) 
Java Result: 1 

Проблемный метод заключается в следующем:

public void input() { 
     try { 
      File dat = new File("Lab04a.dat"); 
      Scanner sc = new Scanner(dat).useDelimiter("/"); 
      String name = sc.next(); 
      int age = sc.nextInt(); 
      Lab.process(name, age); 
     } 
     catch(FileNotFoundException e) { 
      System.out.println("Missing or corrupted data file."); 
      System.exit(0); 
     } 
    } 

линии, дающие ошибки линии 26 и 18, и эти строки:

Line 18:

Lab.input(); 

И строка 26:

int age = sc.nextInt(); 

Строка 18 не может иметь ничего плохого, так как она называет только проблемный метод. Строка 26 (насколько мне известно), где происходит ошибка.

+0

Можете ли вы опубликовать ваше содержимое файла, а? спасибо :) –

+0

«Сканер» ищет целое число после '/', и файл не содержит целого числа. – manouti

+0

@manouti, когда содержимое файла не ясно, как мы можем быть уверены в этом? –

ответ

0

Линия

int age = sc.nextInt(); 


может дать вам InputMismatchException, если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона

+0

Что произойдет, если у вас есть ssss/11111? –

+0

Звонок на sc.next() будет печатать ssss и sc.nextInt() будет печатать 11111. – sol4me

+0

, так как вы знаете, что ваш ответ поможет оператору, когда вы не знаете о содержимом файла? –

0

попробовать этот

Scanner sc = new Scanner(dat).useDelimiter("\\/"); 

EDIT

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.*; 

/** 
* @author Davide 
*/ 
public class test { 
    static Map map; 

    public static void main(String[] args) { 
     // init value 
     input(); 
    } 


    public static void input() { 
     try { 
      File dat = new File("test.dat"); 
      Scanner sc = new Scanner(dat).useDelimiter("\\/"); 
      String name = sc.next(); 
      int age = sc.nextInt(); 
      System.out.println(name + " " + age); 
     } 
     catch(FileNotFoundException e) { 
      System.out.println("Missing or corrupted data file."); 
      System.exit(0); 
     } 
    } 

} 

Дат файл

ciao/56 

UPDATE

try { 
    // ... 
} catch (InputMismatchException e) { 
    sc.next(); 
} 
+0

Этот код не помогает оператору. вы не знаете содержимое файла. ответ на код неверен –