2015-03-17 2 views
1
я не могу

создавать объекты с переменными из текстового файла, у меня есть:Не могу читать из .txt в Java

import java.io.*; 
import java.util.*; 

public class Main { 
public static void main(String[] args){ 

    ArrayList<Employee> ArrEmployee = new ArrayList<Employee>(); // array for employee objects 


    try { 
      Scanner txtIn = new Scanner(new File("/Users/PatrickBui/Documents/workspace/COMP 249 - Assignment 3/src/payroll.txt")); 

      while (txtIn.hasNext()) { // looping through the payroll.txt file and creating Employee objects from its data 

       long EmployeeNumber = txtIn.nextLong(); 
       String EmployeeName = txtIn.next(); 
       String LastName = txtIn.next(); 
       double HoursWorked = txtIn.nextDouble(); 
       double HourlyWage = txtIn.nextDouble(); 

        ArrEmployee.add(new Employee(EmployeeNumber,EmployeeName,LastName,HoursWorked,HourlyWage)); 
      } 
     } catch (FileNotFoundException e) { 

      System.out.println("fail to find file payroll"); 
     } 
} 
} 

До сих пор я не знаю, что может сделайте это неправильно. Payroll.txt отформатирован как таковой:

31718 PHILLIP LENNOX 55.0 20.00 
11528 NANCY TROOPER 40.0 10.45 
16783 JOHN CONNAUGHT 30.5 10.00 
10538 PETER DUNCAN 45.0 10.75 
21O15 JAMES HAROLD 32.0 10.50 

И я получаю эти ошибки при запуске программы:

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextLong(Scanner.java:2222) 
at java.util.Scanner.nextLong(Scanner.java:2182) 
at Main.main(Main.java:16) 

Идеи о том, почему это происходит? Мой код выглядит в правильном порядке, и это действительно меня озадачивает.

+0

Код выглядит отлично. Я могу только предположить, что входной файл каким-то образом поврежден. Фактически, протестируйте его, заменив File только источником String для сканера: 'String file =" 31718 PHILLIP LENNOX 55.0 20.00 \ n11528 NANCY TROOPER 40.0 10.45 "; Сканер txtIn = новый сканер (файл); '. Хорошо работает тогда, так что должен быть файл, который я предполагаю. –

ответ

2

Ваша проблема заключается в том, что у вас есть письмо O вместо нулевого 0 в ID Джеймса Гарольда

21O15 

должен быть

21015 
2

Честно говоря, я сделал бы это по-другому. Прочитайте в строке, разделите на пробел и затем проанализируйте каждую часть. Это мало или больше кода, чем у вас, но дает вам возможность проверять каждую деталь и исправлять проблемы.

Сканер требует очень жесткого формата данных, и вы не можете исправить ситуацию, когда идете (например, в реальном мире одна или несколько из этих линий будут иметь среднее имя, которое полностью скачет ваш сканер).

Проблема с вашей, вероятно, такая простая, как ведущая пустая строка в ваших данных или что-то в этом роде. Если вы хотите продолжать работать таким образом, попробуйте использовать «есть» методы, чтобы увидеть, есть ли у него длинный доступный первый, и если вы не пропустите немного вперед.

Смежные вопросы