如何使用OpenCSV读取长单元格值?

时间:2015-11-13 17:08:43

标签: java opencsv

我正在导入csv文件。我导入的单元格值类似于1.00E + 13,必须读取为10023000000000(实际扩展值)。 我正在使用OpenCSV。

注意:我通过对XLS和XLSX文件使用apache POI实现了这一点,因为POI不支持CSV我使用的是OpenCSV。

POI针对上述情况的解决方案是:

obj

如何在OpenCSV中实现这一目标?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您自己从csvReader解析字符串,Kenny的答案就已经过时了。我唯一担心的是csv文件是字符串,所以输入必须是1.0023E + 13而不是1.00E + 13。

所有这些都说opencsv中有另一种方式,那就是CsvToBean类。您可以使用公共getter和setter创建一个具有所需值的类,然后CsvToBean将为您处理转换,如下面的传递测试所示。

public class CsvToBeanDoubleTest {

    private static final double DOUBLE_NUMBER = 10023000000000d;

    private static final String TEST_STRING = "name,orderNumber,doubleNum\n" +
            "kyle,abc123456,10023000000000\n" +
            "jimmy,def098765,1.0023E+13 ";

    private CSVReader createReader() {
        return createReader(TEST_STRING);
    }

    private CSVReader createReader(String testString) {
        StringReader reader = new StringReader(testString);
        return new CSVReader(reader);
    }

    private MockBean createMockBean(String name, String orderNumber, double num) {
        MockBean mockBean = new MockBean();
        mockBean.setName(name);
        mockBean.setOrderNumber(orderNumber);
        mockBean.setDoubleNum(num);
        return mockBean;
    }

    @Test
    public void parseBeanWithNoAnnotations() {
        HeaderColumnNameMappingStrategy<MockBean> strategy = new HeaderColumnNameMappingStrategy<MockBean>();
        strategy.setType(MockBean.class);
        CsvToBean<MockBean> bean = new CsvToBean<MockBean>();

        List<MockBean> beanList = bean.parse(strategy, createReader());
        assertEquals(2, beanList.size());
        assertTrue(beanList.contains(createMockBean("kyle", "abc123456", DOUBLE_NUMBER)));
        assertTrue(beanList.contains(createMockBean("jimmy", "def098765", DOUBLE_NUMBER)));
    }
}