В настоящее время мой код компилируется и запускается. Тем не менее, программа вылетает, когда программа достигает линии outputFile.println("Package: " + letter);
Почему outputFile.println("Package: " + letter);
и другие outputFile.println("");
приводят к сбою программы и не распечатывают файл dataFile
? Является ли dataFile
даже созданным при выполнении блока try-catch?Почему в строке `outputFile.println (« Пакет: + письмо ») появляется ошибка ошибки исключительного исключения?
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
}
Можете ли вы предоставить журнал ошибок с строкой, которая дает пустое исключение. –
Ваша файловая переменная с именем 'file' имеет значение null, и вы передаете ее в сканер, который будет вызывать NPE. – initramfs
Nice catch @CPUTerminator –