如何使用Java commons csv api在java中更新csv文件中的记录?

时间:2017-12-07 07:41:42

标签: java apache-commons-csv

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

2 个答案:

答案 0 :(得分:4)

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

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();
    }

答案 1 :(得分:1)

Apache CSV界面仅支持读写,您无法使用提供的API更新记录。

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

如果文件的大小大于可用内存,则可能需要一些流式处理方法来读取记录并在读取下一个记录之前将其写出。在这种情况下,你需要自然地写一个单独的文件。