OpenCSV 不写入所有记录

OpenCSV does not write all records

我在 Java 中写了一个方法来更新由制表符分隔的文本文件。我正在使用 opencsv 库。首先,我读取现有文件,然后更改某些列的值,然后覆盖文件。我是 运行 Windows 7. 现在的问题是并非所有内容都写入文件。即使我不更改任何值而只是覆盖文件,也不会写入所有记录。

我的代码如下。有什么问题吗?

 private void csvWrite(int[] boundary, String filename, int answerCount) {
        CSVReader csvReader = null;
        List<String[]> csvBody = null;
        try {
            csvReader = new CSVReader(new FileReader(PATH + FILE),'\t');
            csvBody = csvReader.readAll();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Search for the file
        int count = 0;
        for (String[] str : csvBody) {
            if (str[0].equals(filename)) {
                // found
                csvBody.get(count)[POS_START_INDEX+answerCount-2] = Arrays.toString(boundary);
                break;
            }
            count++;
        }

        try {
            csvReader.close();
            CSVWriter writer = new CSVWriter(new FileWriter(PATH + FILE),'\t');
            writer.writeAll(csvBody);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

我遇到了同样的问题。对我来说,这是因为我没有正确关闭所有的读者和作家。 实施自动关闭后得到解决:

    private File writeToTempFile(File file) throws IOException {
    File tempFile = new File("/var/tmp/newcsv.csv");
    tempFile.createNewFile();
    try(FileReader fileReader = new FileReader(file);
    CSVReader csvReader = new CSVReaderBuilder(fileReader).withSkipLines(4).build();
    FileWriter outputFileWriter = new FileWriter(tempFile);
        CSVWriter writer = new CSVWriter(outputFileWriter, CSVWriter.DEFAULT_SEPARATOR,
                CSVWriter.NO_QUOTE_CHARACTER,
                CSVWriter.NO_ESCAPE_CHARACTER,
                CSVWriter.DEFAULT_LINE_END);){
        writer.writeAll(csvReader.readAll());
    }catch (Exception e){

    }
    return tempFile;
}