我正在尝试使用BeanIO将一些csv文件中的一些内容写入另一个csv文件。我能够获取内容但标题不写入目标文件。我不知道如何解决这个问题。请有人帮我解决这个问题。以下是代码
StreamFactory factory = StreamFactory.newInstance();
factory.load("config" + File.separatorChar
+ CSVMain.prop.getProperty("ordersmapping"));
orderWriter = factory.createWriter("salesOrder", new File(property));
for (int i = 0; i < orders.size(); i++) {
orderWriter.write(orders.get(i));
}
orderWriter.flush();
orderWriter.close();
代码写在方法中。我还想从输出中删除回车符(\ r)。 提前致谢。
答案 0 :(得分:1)
请参阅此主题[beanio google group] [1] POSIX Make
我认为你可以从中找到解决方案。
答案 1 :(得分:1)
我从Google Groups线程获得了答案,该线程使用了一个标题类,然后将字段设置为忽略,基本上覆盖。我不想创建一个专用的类,所以我重新使用了map
类,如下所示:
<stream name="XYZ" format="csv">
<parser>
<property name="alwaysQuote" value="true" />
</parser>
<record name="header" class="map" order="1" minOccurs="1" maxOccurs="1">
<field name="Name" default="Name" ignore="true"/>
<field name="Surname" default="Surname" ignore="
</record>
<record name="record" class="map" order="2">
<field name="Name"/>
<field name="Surname"/>
</record>
</stream>
答案 2 :(得分:0)
您可以使用 this util method 轻松创建标题,而无需任何额外的类或 XML 配置。
public static void main(String[] args) {
final String factoryName = "comma delimited csv factory";
final String headerName = "CarHeader";
final var builder = new StreamBuilder(factoryName)
.format("csv")
.addRecord(Headers.of(Car.class, headerName))
.addRecord(Car.class)
;
final var factory = StreamFactory.newInstance();
factory.define(builder);
final ByteArrayOutputStream bout = new ByteArrayOutputStream();
final BeanWriter writer = factory.createWriter(factoryName, new OutputStreamWriter(bout));
try {
writer.write(headerName, null);
writer.write(new Car("Ford Ka", 2016));
writer.write(new Car("Ford Fusion", 2020));
} finally {
writer.close();
}
System.out.println(bout.toString());
// Model,Year
// Ford Ka,2016
// Ford Fusion,2020
}