首页 > 解决方案 > 遍历从 OpenCSV 生成的 Map

问题描述

我有一列数据,从Google Sheetsas输出CSV,也从LibreOfficeas输出CSV。我尝试使用编组这两个文件,OpenCSV但只获得一小部分可用数据。

我怎样才能读入这个文件?我真的没有在这个CSV文件中看到任何逗号......但它只是一列数据。

文件:

thufir@dur:~/jaxb$ 
thufir@dur:~/jaxb$ head input.csv 
Field 1
Foo # 16

bar

baz

fdkfdl

fdsfdsfsdfgh
thufir@dur:~/jaxb$ 

输出:

thufir@dur:~/NetBeansProjects/BaseXFromJAXB$ 
thufir@dur:~/NetBeansProjects/BaseXFromJAXB$ gradle run

> Task :run
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Foo # 16
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Field 1
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Foo # 16

BUILD SUCCESSFUL in 1s
3 actionable tasks: 1 executed, 2 up-to-date
thufir@dur:~/NetBeansProjects/BaseXFromJAXB$ 

代码:

package net.bounceme.dur.basexfromjaxb.csv;

import com.opencsv.CSVReaderHeaderAware;
import java.io.File;
import java.io.FileReader;
import java.net.URI;
import java.util.Collection;
import java.util.Map;
import java.util.logging.Logger;

public class ReaderForCVS {

    private static final Logger LOG = Logger.getLogger(ReaderForCVS.class.getName());
    private Map<String, String> values;

    public ReaderForCVS() {
    }

    public void unmarshal(URI inputURI) throws Exception {
        FileReader f = new FileReader(new File(inputURI));
        values = new CSVReaderHeaderAware(f).readMap();
    }

    public void printMap() {
        Collection<String> stringValues = values.values();
        for (String s : stringValues) {
            LOG.info(s);
        }

        for (Map.Entry<String, String> item : values.entrySet()) {
            String key = item.getKey();
            String value = item.getValue();
            LOG.info(key);
            LOG.info(value);
        }
    }
}

坦率地说,我无法判断图书馆是否正在以一种时髦的方式读取文件,或者文件是否以某种方式被破坏,或者是什么。我会从网站上寻找CSV,但不确定那是什么。我看不出库没有正确解析,但我也看不到这些数据的问题。

从电子表格中导出数据的方法只有这么多CSV,我已经尝试了一些。文件的内容无关紧要,但我正在处理的是那种结构:没有内容的行,只有一列,特殊字符。

以文本形式读入文件可提供所需的输出...

标签: javacsvcollectionshashmapopencsv

解决方案


看起来它的工作方式类似于其他 CSVReaders OpenCSV Guide Reading。这是我使用的一些示例代码,它似乎有效:

CSVReaderHeaderAware csvReaderHeaderAware= new CSVReaderHeaderAware(new StringReader(DAOConstants.IND_DATA));
while (((values = (Map<String, String>) csvReaderHeaderAware.readMap())) != null)
{
      for (Map.Entry<String,String> entry : values.entrySet())  
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}

推荐阅读