Jonathan Allen Grant
Jonathan Allen Grant

Reputation: 3648

Java deletes my file and creates a new one

I am trying to finish a bank accounts homework assignment. I have a text file, "BankAccounts.txt" which is created if there is no file with that name. However, if the file exists, I do not create it. But Java desides to delete all my code inside of it :(. Can you help me identify why this happens? Thanks <3

Code:

static Scanner keyboard = new Scanner(System.in);
static File file;
static PrintWriter Vonnegut; //a great writer
static FileReader Max;
static BufferedReader Maxwell;

public static void main(String[] args) {
    initialize();
}

static void initialize(){
    try { // creating banking file
        file = new File("src/BankAccounts.txt");
        if(!file.isFile()) {file.createNewFile();} //if it doesn't exist, create it
        Vonnegut = new PrintWriter("src/BankAccounts.txt","UTF-8");
        Max = new FileReader("src/BankAccounts.txt");
        Maxwell = new BufferedReader(Max);
        //get list of usernames and passwords for later
        usernames = new String[countLines() / 5];
        passwords = new String[usernames.length];
        checkingAccounts = new String[usernames.length];
        savingsAccounts = new String[usernames.length];
    } catch (IOException e) {
        e.printStackTrace();
    }
}

And this method keeps returning 0... regardless of whether or not my file has data in it.

static int countLines() throws IOException {
    BufferedReader Kerouac = new BufferedReader(Max);

    int lines = 0;

    while(Kerouac.readLine() != null)
        lines++;

    Kerouac.close();
    System.out.println(lines);
    return lines;
}

After I run the program, unless I call a method that writes to the file, all the contents of the file will be gone.

Upvotes: 0

Views: 78

Answers (2)

user207421
user207421

Reputation: 310884

if(!file.isFile()) {file.createNewFile();} //if it doesn't exist, create it

Redundant. Remove.

    Vonnegut = new PrintWriter("src/BankAccounts.txt","UTF-8");

This always creates a new file, which is why the previous line is redundant. If you want to append to the file when it already exists:

    Vonnegut = new PrintWriter(new FileOutputStream("src/BankAccounts.txt", true),"UTF-8");

The true parameter tells the FileOutputStream to append to the file.

See the Javadoc.

Or use a FileWriter instead of a FileOutputStream, same principle.

Upvotes: 2

morgano
morgano

Reputation: 17422

When you create a PrintWriter it will always delete the file if it already exists, from the javadoc:

... If the file exists then it will be truncated to zero size ...

(i. e. its content will be deleted)

Instead of using FileReader and PrintWriter you need to use a RandomAccessFile to write and/or read your file in this way:

RandomAccessFile myFile = new RandomAccessFile("/path/to/my/file", "rw");

In this way the file is automatically created if it doesn't exist, and if it does, it just opens it.

Upvotes: 1

Related Questions