从CSV中排除字段

时间:2017-06-19 05:43:38

标签: java univocity

我使用Univocity解析器将Resultset转换为CSV。如果结果集中存在字段,我只希望用户提供的字段出现在输出CSV中。如果结果集中不存在该字段,则相应的列应为空白。我有一个不修改SQL查询的限制。

我使用了excludeFields()方法,但它在输出CSV中将字段值与分隔符一起设为空白。

示例:

Name, Age, Email
Joe, 20, joe@example.com

应用excludeFields后(" Age")。由于setHeaders()方法存在一些已知问题,因此我使用自己的逻辑来设置标题。

Name, Email
Joe, , joe@example.com

但我希望它像:

Name, Email
Joe, joe@example.com

有什么办法可以实现吗?

1 个答案:

答案 0 :(得分:1)

目前,编写器由您定义的标头控制。字段选择只会使作者在未选中的列中打印出空白。

下一个版本将在写入时提供列重新排序,这应该做你想要的。如果你可以使用2.5.0-SNAPSHOT它应该已经工作:

ResultSet resultSet = statement.executeQuery("SELECT * FROM users");

CsvWriterSettings csvWriterSettings = new CsvWriterSettings();
csvWriterSettings.excludeFields("Age");
csvWriterSettings.setHeaderWritingEnabled(true);
csvWriterSettings.setColumnReorderingEnabled(true); //this does the trick

CsvRoutines csvRoutines = new CsvRoutines(csvWriterSettings);
csvRoutines.write(resultSet, output);

希望它有所帮助!