我有一个使用 Apache commons API 编写的 csv 文件,我也可以读取该文件,但是我不知道如何使用 Apache commons API 编辑 csv 文件中的记录值,需要这方面的帮助。
问问题
5157 次
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 回答