【发布时间】: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
-
您明确地以附加模式打开文件,因此所有现有内容都将被保留。