我的输入文件具有多种格式。 我的第一行将被定界,其余文件将为固定长度。
如何编写映射XML文件并从Java中读取它?
我尝试编写多个流,但这没用。
我的mapping.xml是这样的
<beanio xmlns="http://www.beanio.org/2012/03"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">
<stream name="ebcdicFile" format="delimited">
<parser>
<property name="delimiter" value="|" />
</parser>
<record name="header"
class="sft_action_cms_apt_394.sft_action_cms_apt_394.FileSegment">
<field name="fileName" />
<field name="batchCount" />
<field name="totalRecords" />
<field name="maxBatchSize" />
<field name="pickUpTime" />
<field name="errorFlag" />
</record>
</stream>
<stream name="file" format="fixedlength">
<record name="dec"
class="sft_action_cms_apt_394.sft_action_cms_apt_394.pojo">
<field name="tag" length="4" />
<field name="description" length="unbounded" />
</record>
</stream>
</beanio>
答案 0 :(得分:0)
我不认为BeanIO涵盖了您的用例。我会尝试做这样的事情:
java.io.BufferedReader
mark()
将您当前的位置放在BufferedReader
的输入上。reset()
BufferedReader
,这将使其回到与您呼叫mark()
的位置相同的位置。您可能需要重复上述过程或对其进行调整,具体取决于数据的结构。您不会显示“标头”是单个记录还是在“十进制”记录之间可以多次出现。
如果您只有一个“标头”记录,然后有多个“ dec”记录,则可以使用以下方法简化上述过程:
使用BufferedReader.readLine()
方法将数据的第一行直接读取到String
中。将此字符串传递给BeanIO阅读器以对其进行解析,并为您提供“标头”对象。
String firstLine = bufferedReader.readLine(); BeanReader beanReader = null; FileSegment fileSegment = null; 尝试(Reader in = new BufferedReader(new StringReader(firstLine))){ beanReader = factory.createReader(“ ebcdicFile”,in); fileSegment =(FileSegment)beanReader.read(); }
现在,您可以创建另一个BeanReader
,以使用“文件”流读取其余的输入数据。