Hi i have a small problem and think i'm just not getting the correct syntax on one line of code. basically, i can write into my csv file and find a specific record using string tokenizer but it is not updating/editing the specified cells of that record. the record remains the same. please help....
-
1We have absolutely no clue what you're doing, so we can't tell what part you're doing wrong... – Ignacio Vazquez-Abrams Dec 09 '10 at 11:56
-
Do you mean it isn't updating your file? The question would be a lot easier to anwer if you provided a short example of what you are trying to do and information about how it fails. – Mattias Nilsson Dec 09 '10 at 12:02
-
also, if you need to work with csv files, did you have a look at any of the available csv packages for Java? If you're doing something non-trivial, they might make your life easier. – Mattias Nilsson Dec 09 '10 at 12:02
4 Answers
I have used http://opencsv.sourceforge.net in java
Hi, This is the code to update CSV by specifying row and column
/**
* Update CSV by row and column
*
* @param fileToUpdate CSV file path to update e.g. D:\\chetan\\test.csv
* @param replace Replacement for your cell value
* @param row Row for which need to update
* @param col Column for which you need to update
* @throws IOException
*/
public static void updateCSV(String fileToUpdate, String replace,
int row, int col) throws IOException {
File inputFile = new File(fileToUpdate);
// Read existing file
CSVReader reader = new CSVReader(new FileReader(inputFile), ',');
List<String[]> csvBody = reader.readAll();
// get CSV row column and replace with by using row and column
csvBody.get(row)[col] = replace;
reader.close();
// Write to CSV file which is open
CSVWriter writer = new CSVWriter(new FileWriter(inputFile), ',');
writer.writeAll(csvBody);
writer.flush();
writer.close();
}
This solution worked for me, Cheers!

- 164
- 1
- 7
I used the below code where I will replace a string with another and it worked exactly the way I needed:
public static void updateCSV(String fileToUpdate) throws IOException {
File inputFile = new File(fileToUpdate);
// Read existing file
CSVReader reader = new CSVReader(new FileReader(inputFile), ',');
List<String[]> csvBody = reader.readAll();
// get CSV row column and replace with by using row and column
for(int i=0; i<csvBody.size(); i++){
String[] strArray = csvBody.get(i);
for(int j=0; j<strArray.length; j++){
if(strArray[j].equalsIgnoreCase("Update_date")){ //String to be replaced
csvBody.get(i)[j] = "Updated_date"; //Target replacement
}
}
}
reader.close();
// Write to CSV file which is open
CSVWriter writer = new CSVWriter(new FileWriter(inputFile), ',');
writer.writeAll(csvBody);
writer.flush();
writer.close();
}

- 1,491
- 2
- 22
- 27
-
lifesaver! I knew this is what I needed to do, I had trouble on how to update the cell and write successfully, but this filled the gaps and holes in my logic. thank you! – frlzjosh May 31 '20 at 01:54
You're doing something like this:
String line = readLineFromFile();
line.replace(...);
This is not editing the file, it's creating a new string from a line in the file.
String
instances are immutable, so the replace
call you're making returns a new string it does not modify the original string.
Either use a file stream that allows you to both read and write to the file - i.e. RandomAccessFile or (more simply) write to a new file then replace the old file with the new one
In psuedo code:
for (String line : inputFile) {
String [] processedLine = processLine(line);
outputFile.writeLine(join(processedLine, ","));
}
private String[] processLine(String line) {
String [] cells = line.split(","); // note this is not sufficient for correct csv parsing.
for (int i = 0; i < cells.length; i++) {
if (wantToEditCell(cells[i])) {
cells[i] = "new cell value";
}
}
return cells;
}
Also, please take a look at this question. There are libraries to help you deal with csv.
-
not sure how to implement the RAF and have done a bit of reading on it any way to point me in the right direction by code? – JavaBabyGirl Dec 09 '10 at 14:24
CSV file is just a file. It is not being changed if you are reading it. So, write your changes!
You have 3 ways.
1
- read line by line finding the cell you want to change.
- change the cell if needed and composite new version of current line.
- write the line into second file.
- when you finished you have the source file and the result file. Now if you want you can remove the source file and rename the result file to source.
2
Use RandomAccess file to write into specific place of the file.
3
Use one of available implementations of CSV parser (e.g. http://commons.apache.org/sandbox/csv/) It already supports what you need and exposes high level API.