Java 的 while 循环中的 Try-Catch

Try-Catch inside a while loop in Java

所以基本上我的代码试图读取 .txt 文件,然后使用这些变量(long、string、string、double、double)创建对象。当 .txt 文件中的变量不是 long、string 或 double 时,它​​被写入另一个文件。我已经写了这个代码,但它没有超过第一个 catch (InputMismatchException n)。我的代码有什么问题?

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

try {
    Scanner txtIn = new Scanner(new File("payroll.txt"));


    while (txtIn.hasNext()) { // looping through the payroll.txt file and creating Employee objects from its data
        try {
            long EmployeeNumber = txtIn.nextLong();
            String EmployeeName = txtIn.next();
            String LastName = txtIn.next();
            double HoursWorked = txtIn.nextDouble();
            double HourlyWage = txtIn.nextDouble();
            if (HourlyWage > 10.35){ 
                throw new InputMismatchException(); // throws exception if the hourly wage is less than 10.35$
            }
            else
                ArrEmployee.add(new Employee(EmployeeNumber,EmployeeName,LastName,HoursWorked,HourlyWage)); // creates Employee objects according to the input payroll.txt
            i++;
        } catch (InputMismatchException n) { // catching long,strings and doubles in the payroll.txt that aren't valid
            PrintWriter txtOut = new PrintWriter("payrollError.txt");
            txtOut.println(Employee.EmployeeNumber + " " + Employee.EmployeeName + " " + Employee.LastName + " " + Employee.HoursWorked + " " + Employee.HourlyWage);
            txtOut.close();
        }
    }
} catch (FileNotFoundException e) {
    System.out.println("File payroll.txt was not found.");
}

路径文件没问题。为了便于理解,我将其缩短了。

您为 PrintWriter 使用的构造函数实际上会覆盖文件(如果它已经存在)。来自 documentation:

fileName - The name of the file to use as the destination of this writer. If the file exists then it will be truncated to zero size; otherwise, a new file will be created. The output will be written to the file and is buffered.

您应该在循环之前创建一次 txtOut 并在循环之后关闭它。这样它只会被打开一次,而不是在每次捕获异常时都从头开始。