使用扫描仪读取文件时出现异常
Getting exception while reading from a file using Scanner
我正在尝试获取一个程序来读取文本文件的内容,将每一行存储在一个数组中,然后以有序的方式为每种类型输出结果。我有排序的部分,但每次我 运行 主程序时,我都会收到 try/catch 的错误消息(这仍在进行中)
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();
}
}
}
我在 "Wrong type of file" 收到消息。是因为我需要跳过文本文件的headers吗?
这是 EmployeeFX 代码
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;
}
}
这是堆栈跟踪
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)
这是输入文本文件
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
为 class 的 main
方法尝试以下代码:查找内联注释。
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();
}
}
我正在尝试获取一个程序来读取文本文件的内容,将每一行存储在一个数组中,然后以有序的方式为每种类型输出结果。我有排序的部分,但每次我 运行 主程序时,我都会收到 try/catch 的错误消息(这仍在进行中)
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();
}
}
}
我在 "Wrong type of file" 收到消息。是因为我需要跳过文本文件的headers吗?
这是 EmployeeFX 代码
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;
}
}
这是堆栈跟踪
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)
这是输入文本文件
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
为 class 的 main
方法尝试以下代码:查找内联注释。
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();
}
}