从CSV文件中删除现有行并在Jackson中创建新行

b4wnujal  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(91)

我正在使用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创建新记录。

3pvhb19x

3pvhb19x1#

你可以像这里描述的那样做Find a line in a file and remove it。如果你的csv总是以id开头,你可以很容易地过滤掉它。

相关问题