[英]How to write a mapping.xml file when we are trying to read Multiple input Formats using BeanIO
我的輸入文件有多種格式。 我的第一行將被定界,其余文件將為固定長度。
如何編寫我的映射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>
我認為BeanIO不會涵蓋您的用例。 我會嘗試做這樣的事情:
java.io.BufferedReader
mark()
您當前的位置mark()
在BufferedReader
的輸入上。 BufferedReader
reset()
,這將使其“返回”到與調用mark()
相同的位置。 您可能需要重復以上過程或對其進行調整,具體取決於數據的結構。 您不會顯示“標頭”是單個記錄還是在“十進制”記錄之間可以多次出現。
如果只有一個“標頭”記錄,然后有多個“ dec”記錄,則可以使用以下方法簡化上述過程:
直接使用BufferedReader.readLine()
方法將數據的第一行讀取到String
。 將此字符串傳遞給BeanIO閱讀器以對其進行解析,並為您提供“標頭”對象。
String firstLine = bufferedReader.readLine(); BeanReader beanReader = null; FileSegment fileSegment = null; try (Reader in = new BufferedReader(new StringReader(firstLine))) { beanReader = factory.createReader("ebcdicFile", in); fileSegment = (FileSegment)beanReader.read(); }
現在,您可以創建另一個BeanReader
以使用“文件”流讀取其余的輸入數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.