PrintWriter not writing to file (Java)

前端 未结 2 626
失恋的感觉
失恋的感觉 2021-01-23 10:51

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.

相关标签:
2条回答
  • 2021-01-23 11:01
    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
    
    0 讨论(0)
  • 2021-01-23 11:04

    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.

    0 讨论(0)
提交回复
热议问题