Как я могу распечатать всю строку строки в выходной файл (Java)?
В моем задании мне нужно работать с выводом списка имен в допустимый выходной файл или файл ошибок. Что мне нужно сделать сейчас - это проверить текстовый файл на наличие ошибок ввода (например, то, что должно быть int, содержит букву, поэтому выдает исключение).
Моя программа отлично работает в обнаружении этих ошибок и распечатывает достоверную информацию, но моя проблема заключается в выводе неверной информации. Например, когда моя программа обнаруживает недопустимый двойной ввод, она печатает только часть строки вместо всей строки. Я в недоумении, и мне интересно, можете ли вы мне помочь?
Вот моя программа...
import java.io.*;
import java.util.*;
public class TaxDeductionDriver {
public static void main(String[] args) {
//array will be used to store information and output net income
Employee[] info = new Employee[71];
Scanner input = null;
PrintWriter output = null;
int i = 0;
try {
input = new Scanner(new FileInputStream("payroll.txt"));
output = new PrintWriter(new FileOutputStream("error.txt"));
while(input.hasNextLine()) {
try {
//assigns a column to each variable
int empNum = input.nextInt();
String fName = input.next();
String lName = input.next();
double avgHrs = input.nextDouble();
double hrWage = input.nextDouble();
//checks to see if wage is below minimum ($10.35)
if(hrWage < 10.35) {
throw new InputMismatchException();
}
//object used to output list of valid information and calculate tax deductions
//if one of parameters is null, input mismatch exception is thrown
info[i] = new Employee(empNum, fName, lName, avgHrs, hrWage);
i++;
}
catch (InputMismatchException e) {
//outputs invalid information to error file
output.println(input.nextLine());
continue;
}
}
output.close();
}
catch (FileNotFoundException e) {
System.out.println("Couldn't find file");
}
finally {
System.exit(0);
}
}
}
мой файл ошибок должен быть таким
> >Error lines found in file payroll
16783 JOHN CONNAUGHT 30.5 10.00
21O15 JAMES HAROLD 32.0 10.50
52726 MITCHELL HACKETT 23,7 12.05
#9331 MARIO TODARO 35.0 17.00
22310 CLAUDIA O’HARE 30.5 9.80
26734 EDITH ROOSEVELT 20.O 25.50
41024 EMILE BOURGEOYS 8.5 6.45
43018 JAMES WALKER 20.0 8.00
00812 VICTORIA PORTER 36.0 9.50
9201( DAVID BROCK 29.0 22.50
Но когда я запускаю программу, она заканчивается так
*john connaught is missing here*
21O15 JAMES HAROLD 32.0 10.50
23,7 12.05
#9331 MARIO TODARO 35.0 17.00
20.O 25.50
9201( DAVID BROCK 29.0 22.50
У меня есть представление о том, что происходит, но как мне заставить PrintWriter вывести всю строку вместо ее части?
2 ответа
Сканер будет продвигаться каждый раз, когда вы вызываете "следующий" метод, поэтому в вашем блоке перехвата input.nextLine() вернет оставшуюся часть строки от последнего "следующего" вызова до следующего символа конца строки.
Чтобы это исправить, сначала нужно прочитать всю строку, проанализировать ее и в случае ошибки вывести ее. Что-то вроде этого:
String line = input.nextLine();
try {
String[] tokens = line.split("\\s+");
int empNum = Integer.parseInt(tokens[0]);
String fName = tokens[1];
String lName = tokens[2];
double avgHrs = Double.parseDouble(tokens[3]);
double hrWage = Double.parseDouble(tokens[4]);
//.......
}
catch (InputMismatchException e) {
output.println(line); //outputs invalid information to error file
}
Попробуйте изменить эту строку:
output.println(input.nextLine());
чтобы:
output.println(empNum +" fname" +" lname"+ avghrs + ""+ hrswage);