【问题标题】:read csv file using column names in java使用java中的列名读取csv文件
【发布时间】:2014-08-12 05:56:59
【问题描述】:

我有一个包含数百行和许多列的 .csv 文件。我想从文件中读取特定的列。这些是我的列名。

productId title imageUrlStr mrp price productUrl categories productBrand

从此我想阅读我通过这种方式完成的所有列

final String DELIMITER = ",";
        try
        {
            String line = "";
            //Create the file reader
            fileReader = new BufferedReader(new FileReader(fileToParse));

            //Read the file line by line
            while ((line = fileReader.readLine()) != null)
            {
                String name,imgURL,productURL,price;
                String[] images;
                //Get all tokens available in line
                String[] tokens = line.split(DELIMITER);
                name=tokens[1];
                images=tokens[2];

它是这样的。但问题是令牌[2],它是列'imageUrlStr'有多个由逗号分隔的值。我只想要该列的第一个值。并且没有固定的数字,有些列中有 3 个值,有些列中有 4 个等。所以我不能再次使用 coma 分隔该值以获得第一个值并转到下一列。 我的问题是我可以使用 CSV 文件中的列名进行分隔和拆分吗?因此指定的列名将存储到一个字符串,然后将另一个存储到另一个字符串。所以我可以拆分 imageurlstr 的值并取第一个值,然后转到下一列。

【问题讨论】:

    标签: java csv file-io opencsv


    【解决方案1】:

    我通常使用 Acpache Commons CSV。 http://commons.apache.org/proper/commons-csv/

    【讨论】:

      【解决方案2】:

      如果您的 CSV 结构正确,那么所有这些 imageUrlStr 值都包含在引号中,例如:“url1、url2、url3”,否则您的 CSV 格式有问题。

      有许多库,例如: http://commons.apache.org/proper/commons-csv/ http://opencsv.sourceforge.net/

      您甚至可以使用正则表达式进行解析。例如"(?:\\s*(?:\\\"([^\\\"]*)\\\"|([^,]+))\\s*,?|(?<=,)(),?)+?"

      【讨论】:

      • 我得到的值就像你在双引号中所说的那样
      • 比,我建议你看看现有的库或调整你的解决方案。
      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 2022-11-12
      • 2012-10-17
      • 2017-05-17
      • 2015-05-04
      • 1970-01-01
      相关资源
      最近更新 更多