我的代码当前编译并运行。但是,当程序到达该行时程序崩溃outputFile.println("Package: " + letter);
为什么outputFile.println("Package: " + letter);
和其他outputFile.println("");
导致程序崩溃并且不打印到文件dataFile
?dataFile
甚至在 try-catch 块执行时被创建?
import java.util.Scanner;
import java.text.NumberFormat;
import java.util.InputMismatchException;
import java.lang.NullPointerException;
import java.io.*;
public class Lab5backup
{
public static void main (String[] args) {
Scanner keyboard = new Scanner(System.in);
NumberFormat fmtCurr = NumberFormat.getCurrencyInstance();
System.out.print("Data file of prior internet usage: ");
String dataFile = keyboard.nextLine();
File file = null;
Scanner openFile = null;
FileWriter writeFile = null;
PrintWriter outputFile = null;
boolean invalid;
try {
openFile = new Scanner(file);
writeFile = new FileWriter(dataFile, true);
outputFile = new PrintWriter(writeFile);
invalid = false;
}
catch (FileNotFoundException fnfe) {
System.out.print("No such file exists; creating it.\n");
invalid = true;
}
catch (NullPointerException npe) {
System.out.print("No such file exists; creating it.\n");
invalid = true;
}
catch (IOException ioe) {
invalid = true;
}
File inFile = new File(dataFile);
if (inFile.exists()) {
averageHours = openFile.nextDouble();
averagePaid = openFile.nextDouble();
totalPaid = openFile.nextDouble();
System.out.println("Usage history: ");
System.out.println(" Average Hours Used: " + averageHours);
System.out.println(" Average Paid: " + averagePaid);
System.out.println(" Total Paid: " + fmtCurr.format(totalPaid));
}
//create and validate variables here
//taken out of example because not important to question
outputFile.println("Package: " + letter);
if (openFile.hasNextDouble())
averageHours = ((hours + openFile.nextDouble())/numOfHourInputs++);
outputFile.println("Hours: " + hours);
if (openFile.hasNextDouble())
averagePaid = ((charge + openFile.nextDouble())/numOfCharges++);
outputFile.println("Charge: " + charge);
outputFile.println("Average Hours: " + averageHours);
outputFile.println("Average Paid: " + averagePaid);
totalPaid += charge;
outputFile.println("Total Paid: " + totalPaid);
openFile.close();
outputFile.close();
} //end of main method
}