4

誰かがフラットパイプで区切られたファイルをJAVAPojoに解析する方法を指摘し、推奨できるかどうかを評価します。

例えば。フラットファイル0001|XYZ | 120

これは、次のようなPOJOに読み込む必要があります。

public class pojo {

private String acct;
private String customer;
private int balance;
}

入力ファイル全体をコレクションとして読み取ることはできますが、各トークンをpojoメンバーに設定することになります。代わりに、pojoメンバーに解析したいと思います。POJOへのCASTORXMLマッピングに似たもの。

この点で助けに感謝します。前もって感謝します

4

5 に答える 5

7

Bean IOを使用できます。私はこれを広範囲に使用しています。

XMLを次のように構成します

<stream name="employees" format="delimited" strict="true">
  <parser>  
    <property name="delimiter" value="|" />
  </parser>
  <record name="test" class="example.Pojo" minOccurs="1" maxOccurs="1">
      <field name="act" />
      <field name="customer" />
      <field name="balance" type="int" />
    </record>
 </stream>

詳細については、こちらを参照してください。

于 2012-12-13T05:24:32.857 に答える
3

OopenCSV http://opencsv.sourceforge.net/には、探しているものが含まれています。区切り文字を|fromに変更するだけ,です。そして、あなたはすべて準備ができているはずです。

于 2012-12-13T05:16:35.010 に答える
2

一度に 1 行ずつ読み取り、値を分割し、POJO コンストラクターを呼び出します (利用できない場合は作成します)。

   List<pojo> pojoList = new ArrayList<pojo>();
   BufferedReader br = new BufferedReader(new FileReader("FlatFile.txt"));
   String line = "";
   while((line = br.readLine()) != null) {  
       String[] fields = line.split("\|");
       pojo p = new pojo(fields[0], fields[1], fields[2]);
       pojoList.add(p);
   }
于 2012-12-13T05:44:16.377 に答える
0

迅速な対応に感謝します。Thihara の推奨に基づいて、OPENCSV を機能させることができました (Bean Mapping に貢献してくれた Glen Smith と Kyle Miller に感謝します) OPENCSV からopencsv -2.3.jar を取得します

私のような他の人に利益をもたらすために、完全なソースを投稿しています。

入力ファイル

/**
     * Input File: acct_os.txt
     * 
     * <pre>
     * 12345|ABC Company|120.45
     * 34567|XYZ Company|45.00
     * 99999|MNC Bank|67.00
     */

/**
 * Bind File to a POJO
 * 
 * @param inputFile
 * @param delim
 * @throws FileNotFoundException
 */
public void bindFileToPojo(String inputFile, char delim) throws FileNotFoundException {

    System.out.println("\n===== Reading to a POJO\n");

    ColumnPositionMappingStrategy<TestCustomerBean> strat = new ColumnPositionMappingStrategy<TestCustomerBean>();
    strat.setType(TestCustomerBean.class);
    /**
     * the fields to bind do in your JavaBean
     */
    String[] columns = new String[] { "acct", "customer", "balance" };
    strat.setColumnMapping(columns);

    CsvToBean<TestCustomerBean> csv = new CsvToBean<TestCustomerBean>();
    /**
     * Read file contents to list using CSVReader
     */
    List<TestCustomerBean> list = csv.parse(strat, new CSVReader(new FileReader(inputFile), delim));
    /**
     * Display column mapping
     */
    displayColumnMapping(strat.getColumnMapping());

    for (TestCustomerBean bean : list) {
        System.out.println("account: ["
                + bean.getAcct()
                    + "] customer: ["
                    + bean.getCustomer()
                    + "] balance: ["
                    + bean.getBalance()
                    + "]");
    }
}

/**
 * Display column mapping
 * 
 * @param columns
 */
private void displayColumnMapping(String[] columns) {
    for (String column : columns) {
        System.out.println("Column Mapping-->" + column);
    }
}

TestCustomerBean (getter/setter 省略)

private String acct;
private String customer;
private Double balance;

出力は次のようになります

===== POJO への読み取り

列マッピング-->acct
列マッピング-->customer
列マッピング-->残高
account: [12345] customer: [ABC Company] balance: [120.45]
account: [34567] customer: [XYZ Company] balance: [45.0]
口座: [99999] 顧客: [MNC Bank] 残高: [67.0]

于 2012-12-13T07:43:56.677 に答える
0

さらに別のフォーラムは、JayaMohan からの提案に従ってスムーズに推奨されました (ありがとう)。beanio を使用して POJO にマップされたフラット ファイルを取得できます。ビーニオを手に入れることができます

beanio を使用する完全なソース

    /**
 * Read inputFile and map to BeanIO Mapping file and bind to pojo
 * 
 * @param inputFile
 * @param mappingFile
 */
public void flatToBeanReader(String inputFile, String mappingFile) {
    /**
     * create a StreamFactory
     */
    StreamFactory factory = StreamFactory.newInstance();
    /**
     * load the mapping file
     */
    factory.load(mappingFile);
    /**
     * use a StreamFactory to create a BeanReader
     */
    BeanReader in = factory.createReader("customers", new File(inputFile));
    TestCustomerBean cust;
    while ((cust = (TestCustomerBean) in.read()) != null) {
        System.out.println("acct: ["
                + cust.getAcct()
                    + "] customer: ["
                    + cust.getCustomer()
                    + "] balance: ["
                    + cust.getBalance()
                    + "]");
    }
    in.close();
}

マッピング ファイル

<?xml version="1.0" encoding="UTF-8"?>

http://www.beanio.org/2012/03/mapping.xsd">

<stream name="customers" format="delimited" strict="false">
    <parser>
        <property name="delimiter" value="|" />
    </parser>
    <record name="cust" class="TestCustomerBean">

        <field name="acct" />
        <field name="customer" />
        <field name="balance" type="Double" />
    </record>
</stream>

出力は次のようになります
: acct: [12345] customer: [ABC Company] balance: [120.45]
acct: [34567] customer: [XYZ Company] balance: [45.0]
acct: [99999] customer: [MNC Bank] balance: [67.0] ]

于 2012-12-13T09:13:18.177 に答える