如何使用Java中的运行时可配置bean类解析CSV

时间:2014-10-29 17:22:56

标签: java parsing runtime configurable-product

我将在下面详细说明我的要求。 我将自动化手动过程。我将使用java从远程位置读取多个CSV文件。

预计有五种格式的输入文件,每种格式的标题结构都不同。 例如, 类型1 - 号码,ID,姓名,电话,地址

类型2 - 号码,GID,员工姓名,地址1,地址2,电话号码

所以其他三种类型也不同。

前提条件不是特定运行所需的所有文件。我需要逐个阅读这些文件,验证它,记录验证错误,我必须整合 所有文件中的所有正确数据都以标准输出格式存储在一个文件中 标准输出格式如,

号码,名称,ID,地址

我需要在输出文件中单独使用上述数据,其余数据可以忽略。

我试过的如下, 我创建了5个代表每个类型标题的bean类。我只是阅读一个输入,识别它的类型并解析它。我逐行解析。

public String[] parseCSV(String inputLine){
try {  
        String[] fields;

            Pattern p =
                    Pattern.compile(",(?=([^\"]*\"[^\"]*\")*(?![^\"]*\"))");
            fields = p.split(inputLine);
           /*for ( int i = 0; i < fields.length; i++ ) {
                System.out.println(fields[i]);
            }*/

       return fields;

    }

我已根据验证规则进行了验证,并且我将每个行元素附加到对象中。我已将所有对象添加到MAP集合中。 同样,我已经创建了5个bean并且做了同样的事情。

但是,现在需要做的改变是什么。 所有五种类型的名单中的所有标题都是可配置的项目。因此,每当标题结构发生变化时,我都必须更改我的bean类。

我们必须创建一个单独的实用程序,可以为所有五种类型的输入文件配置。 要非常清楚,如果类型1输入带有8列,类型3带有12列,则实用程序可以解析它。

我们将有一个表格,其中包含有关所有五种输入类型的标题结构的数据。 一旦我读取文件并识别其类型,我将点击数据库并读取该特定类型的标题结构及其列数。 我将列数与输入文件的头数相匹配,我将不得不继续在运行时创建一个bean类,具体取决于现在读取的头结构。 我会像上面那样验证和巩固。

要求是, bean类的运行时配置,具体取决于输入的类型

请让我知道您的想法,如果您也分享代码,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议您查看Apache commons-csv library。它允许您解析CSV并轻松获取标题行的映射以获取列名称。之后,您可以轻松地执行任何操作,以确定您已打开的CSV类型。