[英]Add/append data to specific row/cell of an existing CSV file
我正在尝试将 append 的值添加到 csv 文件中的特定行,但附加的默认值是在 csv 文件的末尾添加值。 不完全确定如何在特定行的末尾告诉它 append。 我的代码如下所示:
try {
writer = new FileWriter(csvFile ,true);
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
// use comma as separator
String[] id = line.split(cvsSplitBy);
if(id[0].equals("1")){
writer.append(",");
writer.append("Success");
System.out.println("Done");
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
目标是使程序添加“成功”,其中 csv 行 id 等于 1。当前结果是:
Id,Name,Sex,Age
1,Nick,Male,23
2,Dick,Male,25,Success
我想要的是:
Id,Name,Sex,Age
1,Nick,Male,23,Success
2,Dick,Male,25
任何帮助,将不胜感激。 谢谢。
您不能只是追加到一行的末尾,并期望以下各行保持原样。 考虑一下文本文件的结构,例如,其中包含以下几行:
one
two
该文件包含以下字符序列:
“ o”,“ n”,“ e”,“ \\ n”,“ t”,“ w”,“ o”,“ \\ n”
现在,如果在第1行的末尾添加更多字符,则将覆盖第2行。
因此,当您在一行的末尾插入字符时,您需要移动文件的其余部分以留出空间。 这意味着您必须复制文件其余部分的内容,写入“,Success”字符串,然后将保存的字符复制回该文件。
但是,您正在创建一个将append标志设置为true的FileWriter。 这意味着每次写操作都会追加到文件末尾。 您需要做的而不是附加操作,是标记您需要书写的位置,然后在该位置开始书写。 也许执行此操作最简单的类是RandomAccessFile。
由于CSV行以CRLF(或仅是LF)终止,因此您可以将文件的全部内容读入字符串中,并使用正则表达式将SuccessLFLF替换为CRLF。
正则表达式将如下所示:
1。*(\\ r \\ n)
给您\\ r \\ n作为编号的捕获组。
希望这可以帮助
是的,您可以做到这一点,但不是直截了当....您需要在开始时读取和 append 您的数据然后写入新文件,这将覆盖。
查找以下示例:
1 - 读取文件,保留 header 分开然后内容分开
2 - 将新的内容/行数据添加到开始列表
3 - 将 header 添加到开头,因为我们希望 header 应该是第一个
4 - 然后将整个数据写入.csv 文件
代码(您需要在 pom 中为 CSVWritter/CSVReader 添加 jar/依赖项)-
try {
FileReader filereader = new FileReader(file);
CSVReader csvReader = new CSVReaderBuilder(filereader).build();
String[] header = csvReader.readNext();
List<String[]> allData = csvReader.readAll();
FileWriter outputfile = new FileWriter(file, false);
CSVWriter writer = new CSVWriter(outputfile);
String[] data = {"test1", "test2"};
allData.add(0,data);
allData.add(0,header);
for (String[] dt : allData){
writer.writeNext(dt);
}
// closing writer connection
writer.close();
}
catch (Exception e) {
e.printStackTrace();
}
享受:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.