java - 如何写一个列表在带有 simpleflatmapper 的 csv 文件中?
问题描述
我必须使用库simpleflatmapper,但我找不到一种方法来简单地用这个库写入csv 文件a 。我可以解析(没有空白行)并存入:List<String[]>
List<String[]>
FileReader file = new FileReader("file.csv");
Iterator<String[]> parser = CsvParser.separator(',').quote('\"').iterator(file);
List<String[]> lines = new ArrayList<String[]>();
String[] line;
while(parser.hasNext()) {
line = parser.next();
if (line[0].length() != 0) {
lines.add(line);
}
}
FileWriter fw = new FileWriter("copy_file.csv");
........
但是我发现没有办法用 .csv 的数据编写一个新的 csv 文件List<String[]> lines
。我很确定这是可能的,但没有足够的适当文档。简而言之,我需要帮助!
解决方案
在与库的作者讨论之后,这种情况下的理想代码似乎是使用CsvCellWriter
(当我们事先不知道要写入的列数,实际上如果我们没有标题)而不是CsvWriter
因为CsvWriter
需要提前知道要写入的csv文件的结构;线是一个List<String[]>
Maven依赖:
<groupId>org.simpleflatmapper</groupId>
<artifactId>sfm-csv</artifactId>
<version>3.18.3</version>
import org.simpleflatmapper.csv.*;
import org.simpleflatmapper.csv.impl.writer.CsvCellWriter;
..........
FileWriter writer = new FileWriter("new_file.csv");
CsvCellWriter cellWriter = CsvCellWriter.DEFAULT_WRITER.separator(',').quote('"');
lines.forEach ( strs -> {
try {
if (strs.length > 0) {
cellWriter.writeValue(strs[0], writer);
for (int i = 1; i < strs.length; i++) {
cellWriter.nextCell(writer);
cellWriter.writeValue(strs[i], writer);
}
}
cellWriter.endOfRow(writer);
} catch (IOException e) {e.printStackTrace();}
} );
writer.close();
此代码允许写入相同的列表数据,因为我们可以选择分隔符、引号以及最终的其他选项。此外,这个库似乎足够方便和快速地解析 csv 文件。
推荐阅读
- django - 如何使用 Django 将验证码添加到我的 Html 表单
- asp.net - Docker IIS App 获取 CORS 策略错误
- ios - 如何使用 Firebase 数据库填充对象数组
- apache-kafka - min insync replicas 属性是否会影响 kafka 中的消费者
- html - 在包装上重置边距?
- wordpress - Gatsby GraphQL + WordPress 中不存在字段(但在本地工作)
- autolayout - 布局锚中 Swift 中常量的值类型
- laravel - 单击时在注册表中提交问题没有任何反应
- ruby-on-rails - Rails builds invalid sql query for has many association
- javascript - How to sync a local folder with gulp, with update for deleted files and folders?