Write file using BufferedWriter in Java [duplicate]
Asked Answered
E

3

5

I am doing a lab where we have to read in an external file, take some statistics on the data, and then create and write a new file with the stats. Everything in my program works except for writing the file, which I cannot understand why my method won't work.

BufferedWriter writer;

public void writeStats(int word, int numSent, int shortest, int longest, int average)
{
    try
    {
        File file = new File("jefferson_stats.txt");
        file.createNewFile();

        writer = new BufferedWriter(new FileWriter(file));

        writer.write("Number of words: " + word );
        writer.newLine();
        writer.write("Number of sentences: " + numSent );
        writer.newLine();
        writer.write("Shortest sentence: " + shortest + " words");
        writer.newLine();
        writer.write("Longest sentence: " + longest + " words");
        writer.newLine();
        writer.write("Average sentence: " + average + " words");    
    }
    catch(FileNotFoundException e)
    {
        System.out.println("File Not Found");
        System.exit( 1 );
    }
    catch(IOException e)
    {
        System.out.println("something messed up");
        System.exit( 1 );
    }
}
Erich answered 24/1, 2013 at 14:24 Comment(1)
You probably want a writer.newLine() after your last writer.write().Leatherman
A
18

You have to flush and close your writer:

writer.flush();
writer.close();
Andriette answered 24/1, 2013 at 14:26 Comment(2)
close() would implicitly call flush , you dont need to call flush explicitlyDysphagia
from Oracle's documentation: Flush: Flushes this output stream and forces any buffered output bytes to be written out. The general contract of flush is that calling it is an indication that, if any bytes previously written have been buffered by the implementation of the output stream, such bytes should immediately be written to their intended destination. On buffered streams it is recommendend to use flush() and then close()Andriette
B
3

You should always close opend resources explicitly or implicitly with Java 7 try-with-resources

    try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
         ...            
    }

besides, there is a more convenient class to write text - java.io.PrintWriter

try (PrintWriter pw = new PrintWriter(file)) {
    pw.println("Number of words: " + word);
    ...
}
Blocky answered 24/1, 2013 at 14:45 Comment(0)
D
0

You have to close your BufferedWriter using close():

writer.close();
Dysphagia answered 24/1, 2013 at 14:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.