Matt
Matt

Reputation: 73

Getting exception while reading from a file using Scanner

I'm trying to get a program to read the contents of a text file, store each line in an array, and then output the results in an ordered fashion for each type. I have the sorted part down, but every time I run the main program, I keep getting an error message for try/catch (This is still a work in progress)

package p20;
import java.io.*;
import java.util.*;

public class EmployeeOrderingDemo {

public static void main(String[] args)  {
    Scanner input=null;
    ArrayList<EmployeeFX> employeeList=new ArrayList<EmployeeFX>();
    try {
        FileReader Info=new FileReader("P01_DATA.txt");
        input=new Scanner(Info).useDelimiter("\\s\\s+");
    }
    catch(FileNotFoundException noFile) {
        System.out.println("Can't open file");
        System.exit(1);
    }

    try {
        while(input.hasNextLine()) {
            employeeList.add(new EmployeeFX(input.nextInt(),input.next(),input.next(), input.nextBoolean(), input.nextInt()));          
            input.nextLine();
        }
    }
    catch(NoSuchElementException element) {
        System.err.println("Wrong type of file");
        System.exit(1);
    }
    catch(IllegalStateException state) {
        System.err.println("Couldn't read from file");
        System.exit(1);
    }
    if(input!=null) {
        input.close();
    }
  }
}

I get the message at "Wrong type of file". Is it because I need to skip the headers of the text file?

Here's the EmployeeFX code

package p20;

public class EmployeeFX {

private int id;
private String firstName;
private String lastName;
private boolean salaried;
private double salary;

public EmployeeFX(int id, String firstName, String lastName,boolean salaried, int salary) {
    this.id=id;
    this.firstName=firstName;
    this.lastName=lastName;
    this.salaried=salaried;
    this.salary=salary;
  }
}

And here's the stack trace

java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at p20.EmployeeOrderingDemo.main(EmployeeOrderingDemo.java:26)

Here's the input text file

id  firstName   lastName    salaried    salary

200 Caroline    James   false   37654
2   Julian  James   false   46499
1   Conor   Habgren true    88767
10  Tillie  Donalan true    98456
15  Alice   Jeanu   true    72821
12  Fred    Habgren false   28767
103 Mary    Donalan false   28456
135 Ed  Jeanu   true    52821

Upvotes: 0

Views: 2386

Answers (1)

YoungHobbit
YoungHobbit

Reputation: 13402

Try the below code for the main method of the class: Find the comments inline.

public static void main(String[] args) {
  Scanner input=null;
  ArrayList<EmployeeFX> employeeList=new ArrayList<EmployeeFX>();
  try {
    FileReader Info=new FileReader("P01_DATA.txt");
    input=new Scanner(Info).useDelimiter("\\s+");   //Single white space regex is enough.
  }
  catch(FileNotFoundException noFile) {
    System.out.println("Can't open file");
    System.exit(1);
  }

  input.nextLine();   // Ignore the first line
  input.nextLine();   // Ignore the second line

  try {
    while(input.hasNext()) {    //hasNext() will check for the next available token
      employeeList.add(new EmployeeFX(input.nextInt(),input.next(),input.next(), input.nextBoolean(), input.nextInt()));
    }  // Additional newLine() reading is not required here.
  }
  catch(NoSuchElementException element) {
    System.err.println("Wrong type of file");
    System.exit(1);
  }
  catch(IllegalStateException state) {
    System.err.println("Couldn't read from file");
    System.exit(1);
  }
  if(input!=null) {
    input.close();
  }
}

Upvotes: 1

Related Questions