我正在使用Jackson
读取和写入CSV文件。我正在编写一个API,它接受JSON请求并将java object
写入CSV文件,该文件工作正常,但我不知道如何检查CSV文件中给定的数据或java object
已经存在。我需要检查数据是否存在,因此删除整行并添加来自API的新数据。
例如,我有下面的CSV文件数据-
id,name,gender,action
1,abc,male,add
2,def,male,delete
我的Rest API在下面-
@PostMapping(path= "/config", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> updateConfig(@RequestBody List<EmpData> configs){
File file = new File(CONFIG_FILE);
Util.addOrUpdate(file, configs);
return ResponseEntity.ok("SUCCESS");
}
public static void addOrUpdate(File file, List<EmpData> data) {
CsvMapper mapper = new CsvMapper();
mapper.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);
CsvSchema schema = mapper.schemaFor(EmpData.class)
.withColumnSeparator(',');
File outputFile = new File(file.toURI());
try {
ObjectWriter writer = mapper.writerFor(EmpData.class).with(schema);
OutputStream os = new FileOutputStream(outputFile , true);
writer.writeValues(os).writeAll(data);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
上面的代码可以很好地在csv文件中添加新行,但是我如何删除现有的行并添加新行。
我想与id
进行比较,如果REST API主体中给定的id
存在于csv文件中,则将其从csv中删除,并从REST API主体中使用该id
创建新记录。
1条答案
按热度按时间3pvhb19x1#
你可以像这里描述的那样做Find a line in a file and remove it。如果你的csv总是以id开头,你可以很容易地过滤掉它。