簡體   English   中英

當我們嘗試使用BeanIO讀取多種輸入格式時,如何編寫mapping.xml文件

[英]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不會涵蓋您的用例。 我會嘗試做這樣的事情:

  • 確保您使用一些支持標記和重置的Reader實現。 一個示例是標准的java.io.BufferedReader
  • 首先mark()您當前的位置mark()BufferedReader的輸入上。
  • 讀取所需的大量數據,以手動確定要使用2個BeanIO流中的哪一個來讀取數據並將其轉換為對象。
  • 現在將BufferedReader reset() ,這將使其“返回”到與調用mark()相同的位置。
  • 現在使用BeanIO讀取數據。

您可能需要重復以上過程或對其進行調整,具體取決於數據的結構。 您不會顯示“標頭”是單個記錄還是在“十進制”記錄之間可以多次出現。

如果只有一個“標頭”記錄,然后有多個“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM