我正在尝试将值附加到csv文件中的特定行,但append'ddend是将值添加到csv文件的末尾。不确定如何告诉它追加到特定行的末尾。我的代码如下所示:
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
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
您不能只追加到一行的末尾,并期望以下行保持原样。考虑一下文本文件的结构,例如一个包含以下几行:
one
two
此文件包含以下字符序列:
“o”,“n”,“e”,“\ n”,“t”,“w”,“o”,“\ n”
现在,如果您在第1行的末尾添加更多字符,则会覆盖第2行。
因此,当您在行的末尾插入字符时,需要移动文件的其余部分以腾出空间。这意味着您必须复制文件其余部分的内容,编写“,Success”字符串,然后将保存的字符复制回文件。
但是你正在创建一个将append标志设置为true的FileWriter。这意味着每个写都附加到文件的末尾。你需要做什么,而不是附加,标记你需要写的位置,并开始在那个位置写作。也许最简单的类是RandomAccessFile。
答案 1 :(得分:0)
由于CSV行由CRLF(或只是LF)终止,因此您只需将文件的全部内容读入字符串并使用正则表达式将CRLF替换为successCRLF。
正则表达式将是这样的:
1。*(\ r \ n)的
将\ r \ n作为编号的捕获组。
希望这有帮助