I'm using opencsv and want to write to a .csv
file through multiple sessions.
However every time I start a new CSVWriter the old file gets erased.
Can I change the behavior of the CSVWriter to write at the end of the file instead of replacing the file?

- 25,249
- 40
- 134
- 225
4 Answers
There's an option in the FileWriter instead of the CSVWriter to append at the end of the file.
This code makes it work:
mFileWriter = new FileWriter(file_path, true);
mCsvWriter = new CSVWriter(mFileWriter);

- 25,249
- 40
- 134
- 225
This is possible with OpenCSV, please have a look at the below example to append resultset to the existing csv file.
CSVWriter writer = new CSVWriter(new FileWriter(fileName.concat(".csv"), true), ',');
writer.writeAll(resultSet, true);
The second parameter to the FileWriter constructor is bool to open a file in append mode.
FileWriter(String fileName, boolean append)

- 49
- 4
It doesn't seem possible to append to a file in opencsv (from an initial look, it looks rather simple), but if you're not restricted to opencsv you can try JExcel. To append to a file in JExcel you essentially need to create a copy then work off that, and overwrite the original. That could be similar in OpenCSV.
Edit: It seems like your only real option is to try out JExcel or read the entire file into a list, append to it, and write that out. If this is too heavy on memory, keep the stream open, read in chunks, write out chunks, then write out your appended chunk.

- 805
- 1
- 8
- 17
It should be possible:
FileWriter w = new FileWriter("yourfile.csv")
CSVWriter writer = new CSVWriter(w, '\t');
...
writer.flush();
CSVWriter writer2 = new CSVWriter(w, '\t');
...
writer2.flush();
w.close();
The CSV tool from the H2 database (disclaimer: I wrote it) also supports this.

- 48,905
- 14
- 116
- 132