如何将整个字符串行打印到输出文件 (java)?
How can I print out entire String line to output file (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 (.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 输出整行而不是部分内容?
尝试更改此行:
output.println(input.nextLine());
至:
output.println(empNum +" fname" +" lname"+ avghrs + ""+ hrswage);
每次您调用 "next" 方法时扫描器都会前进,因此在您的 catch 块中 input.nextLine() 将 return 最后一个 [=] 行的剩余部分14=]调用下一个行尾字符。
要解决此问题,您需要先阅读整行,对其进行解析,并在出现错误的情况下将其输出。像这样:
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
}
在我的作业中,我必须将名称列表输出到有效的输出文件或错误文件。我现在需要做的是扫描文本文件以查找任何输入错误(例如,应该是 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 (.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 输出整行而不是部分内容?
尝试更改此行:
output.println(input.nextLine());
至:
output.println(empNum +" fname" +" lname"+ avghrs + ""+ hrswage);
每次您调用 "next" 方法时扫描器都会前进,因此在您的 catch 块中 input.nextLine() 将 return 最后一个 [=] 行的剩余部分14=]调用下一个行尾字符。
要解决此问题,您需要先阅读整行,对其进行解析,并在出现错误的情况下将其输出。像这样:
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
}