None None
None None

Reputation: 147

Using FileWriter and BufferedWriter clearing file for some reason?

For some reason, when I create a new BufferedWriter and FileWriter in my program (Even if I haven't used it to write anything yet), it clears the file I have selected of all it's text.

selectedFile is determined by a JFileChooser.

public static File selectedFile;

    public static void Encrypt() throws Exception {

    try {
        //if I comment these two writers out the file is not cleared.
        FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);

        List<String> lines = Files.readAllLines(Paths.get(selectedFile.toString()),
                Charset.defaultCharset());
        for (String line : lines) {
            System.out.println(line);
            System.out.println(AESencrp.encrypt(line));

            /*file is cleared regardless of whether or not these are commented out or
             * not, as long as I create the new FileWriter and BufferedWriter the file
             * is cleared regardless.*/

            //bw.write(AESencrp.encrypt(line));
            //bw.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

AESencrp.encrypt is just an encrypting class I have, it won't affect it. If I create a new FileWriter and BufferedWriter then this loop isn't even run (At least I do not believe so, as I don't get the encryption of line or the original contents of the file printed, which prints if I haven't created the new FileWriter/BufferedWriter.)

        for (String line : lines) {
            System.out.println(line);
            System.out.println(AESencrp.encrypt(line));

            /*file is cleared regardless of whether or not these are commented out or
             * not, as long as I create the new FileWriter and BufferedWriter the file
             * is cleared regardless.*/

            //bw.write(AESencrp.encrypt(line));
            //bw.close();
        }

Upvotes: 3

Views: 21608

Answers (3)

AlexWien
AlexWien

Reputation: 28727

you open it for write (for appending use the constructor with append option). what do you expect what else should happen? Further your outcommented close() is at the wrong place. it should be outside the loop.

Upvotes: 0

rgettman
rgettman

Reputation: 178253

It sounds like you want to append to the file, and not overwrite it. Use the proper FileWriter constructor that takes a boolean on whether to append.

FileWriter fw = new FileWriter(selectedFile.getAbsoluteFile(), true);

The constructor you are using, without a boolean, defaults to "overwrite" mode. As soon as you create the FileWriter in overwrite mode, it clears the file so it can start writing from the beginning.

Passing true as the second argument will allow you to append instead of overwrite.

Upvotes: 2

fge
fge

Reputation: 121712

This is because the constructor of FileWriter you are using truncates the file if it already exists.

If you want to append the data instead, use:

new FileWriter(theFile, true);

Upvotes: 3

Related Questions