【问题标题】:How to prevent CSVPrinter from rewriting data again如何防止 CSVPrinter 再次重写数据
【发布时间】:2021-06-30 04:29:22
【问题描述】:

我正在使用这种方法将数据写入 csv,但问题是它在旧数据下方再次重写数据。我怎样才能防止它这样做?我试图设置 FileWriter writer = new FileWriter(answerFile, false); 但它只在 csv 文件中写入最后一个数组。
我有这个代码:

public static void writeCsv(List<String> myList) throws IOException {
    FileWriter writer = new FileWriter(answerFile, true);
    CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT);
    List<String[]> myListSplitted = myList.stream().map(row -> row.split(",")).collect(Collectors.toList());
    csvPrinter.printRecords(myListSplitted);
    csvPrinter.flush();
    csvPrinter.close();
}

这是我调用此方法的方法:

    public static void appendAnswers() throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(questionFile))) {
        String csvRow;
        int counter = 0;
        String[] csvArr;
        String data;
        br.readLine();
        List<String> myList = new ArrayList<>();
        while ((csvRow = br.readLine()) != null) {
            csvArr = csvRow.split(",");
            csvArr = Arrays.copyOf(csvArr, csvArr.length + 1);
            csvArr[csvArr.length - 1] = answers.get(counter);
            data = Arrays.toString(csvArr).replace("[", "").replace("]", 
            "").trim();
            counter++;
            myList = new ArrayList<String>(Arrays.asList(data.split("\n")));
        }
        writeCsv(myList);

    }

【问题讨论】:

  • myListSplitted.stream().forEach(csvPrinter::printRecords) 试试这个?
  • 不,它不起作用
  • 请展示一个最小但完整的示例,包括输入和输出,以及您期望发生的情况。
  • 实际上我已经将 csv 行保存在列表中,并且它们写得很好。问题是它一次又一次地附加在数据下方@tgdavies
  • 您明确地以附加模式打开文件,因此所有现有内容都将被保留。

标签: java list csv


【解决方案1】:

来自manual page

Prints values in a CSV format.

Values can be appended to the output by calling the print(Object) method. 

基本上,CSVPrinter 模拟打印机。打印机将新行附加到已打印的内容上。

如果要覆盖,请更直接地使用FileWriter,而不是使用打印机模拟器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2019-05-17
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多