将数据添加/附加到现有CSV文件的特定行/单元格

时间:2016-10-20 20:14:47

标签: java csv

我正在尝试将值附加到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

任何帮助将不胜感激。感谢。

2 个答案:

答案 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作为编号的捕获组。

希望这有帮助