如何将分隔的平面文件解析为POJO

感谢有人可以指出并建议如何解析扁平管道分隔文件到JAVA Pojo。

例如。 平面文件0001 | XYZ | 120

这需要被读入POJO

public class pojo { private String acct; private String customer; private int balance; } 

我可以将整个输入文件作为集合读取,但是,最终会将每个标记设置为pojo成员。 相反,我想解析pojo成员。 类似于CASTOR XML映射到POJO的东西。

感谢这方面的任何帮助。 提前致谢

您可以使用Bean IO 。 我一直在广泛使用它。

将XML配置为这样的东西

           

请参阅此处了解更多详情。

OopenCSV http://opencsv.sourceforge.net/有你想要的。 只需将分隔符更改为| 来自, 。 你应该全力以赴。

我只想一次读取一行,拆分值并调用POJO构造函数(如果不可用,创建一个),例如:

  List pojoList = new ArrayList(); 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); } 

谢谢大家快速回复。 根据Thihara的建议,设法让OPENCSV工作(感谢Glen Smith和Kyle Miller对Bean Mapping的贡献)从OPENCSV获取opencsv- 2.3.jar

我发布了完整的消息来源,让像我这样的人受益。

输入文件

 /** * Input File: acct_os.txt * * 
 * 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 strat = new ColumnPositionMappingStrategy(); strat.setType(TestCustomerBean.class); /** * the fields to bind do in your JavaBean */ String[] columns = new String[] { "acct", "customer", "balance" }; strat.setColumnMapping(columns); CsvToBean csv = new CsvToBean(); /** * Read file contents to list using CSVReader */ List 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
列映射 - >客户
列映射 - >平衡
帐号:[12345]客户:[ABC公司]余额:[120.45]
帐户:[34567]客户:[XYZ公司]余额:[45.0]
帐号:[99999]客户:[MNC Bank]余额:[67.0]

然而另一个论坛建议按照JayaMohan的建议(谢谢),我可以使用beanio将Flat文件映射到POJO。 你可以得到beanio

使用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(); } 

映射文件

  

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

           

输出将是
帐户:[12345]客户:[ABC公司]余额:[120.45]
帐户:[34567]客户:[XYZ公司]余额:[45.0]
帐户:[99999]客户:[MNC银行]余额:[67.0]