I am writing a kind of a cash machine program that will output the data into a file (Yes, I know its not in English, but that\'s not the point) and I am experiencing an error.
public static void studentAdd() throws IOException ,ClassNotFoundException{
DataOutputStream output = new DataOutputStream(new FileOutputStream("Student.txt"));
PrintWriter pr = new PrintWriter("Student.txt");
Student7 student[] = new Student7[total];
int STOP = 999;
int stdID;
int age;
String address;
String gender;
String name;
Scanner input = new Scanner(System.in);
System.out.println("Please type student ID or 999 to quit");
stdID = input.nextInt();
try {
while(stdID != STOP) {
input.nextLine();
output.writeInt(stdID);
pr.print(stdID + "#");
System.out.println("Please type student name");
name = input.nextLine();
output.writeUTF(name);
pr.print(name + "#");
System.out.println("Please type student age");
age = input.nextInt();
output.writeInt(age);
input.nextLine();
pr.print(age + "#");
System.out.println("Please type student gender");
gender = input.nextLine();
output.writeUTF(gender);
pr.print(gender + "#");
System.out.println("Please type student address");
address = input.nextLine();
output.writeUTF(address);
pr.print(address + "#");
pr.println();
System.out.println("Please type student ID or 999 to quit");
stdID = input.nextInt();
}
; pr.close();
output.close();
} catch (IOException e) {
System.err.println("Error is" + e.getMessage());
} catch(InputMismatchException e) {
System.err.println("Invalid Data Entry");
}finally {
studentMenu();
}
} //end of stuadd
Why are you opening and closing stream in your writeToFile call ? Shouldn't you open the streams in writeFooter() before the for loop, put a try block around the writing code, and close them in a finally section .
The way I see it, You've openedstream first in the writeFooter, the you write printer.println("Проданные товары: ");, and then your for loop's first iteration calls writeToFile, will again open the non-closed stream, that will surely overwrite the first printed line.
Opening and closing File for writing one line is way too inefficient.
You need something like
writeFooter(...) {
try {
openStreams();
writeToFile();
} finally {
closeStream();
}
}
Where writeToFile simply writes , doesn't open or close stream, and closeStream safely closes the streams, i.e. check for null etc.