2

我有一个使用 Apache commons API 编写的 csv 文件,我也可以读取该文件,但是我不知道如何使用 Apache commons API 编辑 csv 文件中的记录值,需要这方面的帮助。

4

2 回答 2

5

我尝试了下面的代码,它完全按照我的预期工作。

public static void updateCsvFile(File f) throws Exception {
        CSVParser parser = new CSVParser(new FileReader(f), CSVFormat.DEFAULT);
        List<CSVRecord> list = parser.getRecords();
        String edited = f.getAbsolutePath();

        f.delete();
        CSVPrinter printer = new CSVPrinter(new FileWriter(edited), CSVFormat.DEFAULT.withRecordSeparator(NEW_LINE_SEPARATOR));
        for (CSVRecord record : list) {
            String[] s = toArray(record);

            if(s[0].equalsIgnoreCase("Actual Text")){
                s[0] = "Replacement Text";
            }
            print(printer, s);
        }
        parser.close();
        printer.close();

        System.out.println("CSV file was updated successfully !!!");
    }


 public static String[] toArray(CSVRecord rec) {
            String[] arr = new String[rec.size()];
            int i = 0;
            for (String str : rec) {
                arr[i++] = str;
            }
            return arr;
        }


    public static void print(CSVPrinter printer, String[] s) throws Exception {
        for (String val : s) {
            printer.print(val != null ? String.valueOf(val) : "");
        }
        printer.println();
    }
于 2017-12-08T11:00:58.373 回答
1

Apache CSV 接口只支持独占读写,不能使用提供的API更新记录。

因此,您最好的选择可能是将文件读入内存,进行更改并再次写出。

如果文件的大小大于可用内存,您可能需要一些流式方法来读取记录并将它们写出,然后再读取下一个。在这种情况下,您自然需要写入单独的文件。

于 2017-12-08T09:10:03.327 回答