Home > Software design >  Write in specific row via FileWriter Java
Write in specific row via FileWriter Java

Time:12-09

I have some data that I want to write. Code:

private void saveStats(int early, int infected, int recovered, int deads, int notInfected, int vaccinated, int iteration){
    try
    {
        FileWriter txt = new FileWriter("statistic.csv");

        txt.write((String.valueOf(early)));
        txt.write(";");
        txt.write(String.valueOf(infected));
        txt.write(";");
        txt.write((String.valueOf(recovered)));
        txt.write(";");
        txt.write((String.valueOf(deads)));
        txt.write(";");
        txt.write((String.valueOf(notInfected)));
        txt.write(";");
        txt.write((String.valueOf(vaccinated)));
        txt.write("\n");
        txt.close();

    } catch (IOException ex)
    {
        ex.printStackTrace();
        System.out.println("Error!");
    }
}

I will use this function to save the iteration number and some additional data; for example:

Iteration Infected Recovered Dead NotInfected Vaccinated

1 200 300 400 500

2 300 400 600 900

etc

A perfect solution would have the first row of the file hold names for each column, similar to what's written above.

CodePudding user response:

For something like this, it is a good idea to use an existing Java CSV library. One possibility is Apache Commons CSV. "Google is your friend" if you want to find tutorials or other alternatives.

But if you wanted to "roll your own" code, there are various ways to do it. The simplest way to change your code so that it records multiple rows in the CSV would be to change

  new FileWriter("statistic.csv");

to

  new FileWriter("statistic.csv", true);

That opens the file in "append" mode, and the new row will be added at the end of the file instead of replacing the existing row.

You should also use Java 7 try with resources to manage the FileWriter. That will make sure that the FileWriter is always properly closed.

If you want to get fancy with CSV headers, more efficient file handling, etc, you will need to write your own CSVWriter class. But if you are doing that, you would be better off using a library someone has already designed, written and tested. (See above!)

  • Related