Apache CSV Reader:如何按标题名称读取CSV列?

时间:2019-11-15 08:16:43

标签: java csv filereader

我正在尝试读取CSV文件,我的方法是识别列标题并读取其中的数据。 import { TextField } from '@material-ui/core'; import { withStyles } from '@material-ui/core/styles'; import clsx from 'clsx'; import PropTypes from 'prop-types'; import React from 'react'; const styles = { root: { margin: '2%', fontSize: '16px', padding: '2%', width: '50%', background: 'rgba(20, 20, 20, .7 )', borderRadius: '10px', outline: 'none', "&:focus":{ color: "yellow", outlineColor: 'white', borderBottomColor: 'white', } }, input: { color: 'white', "&::after": { borderBottom: "2px solid rgb(165, 51, 47)" }, '& :-webkit-autofill': { '-webkit-text-fill-color': 'white', '-webkit-box-shadow': '0 0 0px 1000px #00000000 inset', }, }, } function ClassNames(props) { const { classes, children, className, ...other } = props; return ( <TextField className={clsx(classes.root, className)} {...other} InputProps={{className: classes.input}} /> ); } ClassNames.propTypes = { children: PropTypes.node, classes: PropTypes.object.isRequired, className: PropTypes.string, }; export default withStyles(styles)(ClassNames); 有一个能够执行此操作的库。

下面是我的代码

apache

不幸的是,阅读器只能读取第一个标题public class CSVItemReader { private File file; public CSVItemReader(File file) { this.file = file; } public List<Item> readFile() { try { Reader reader = new FileReader(file); CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT .withHeader("Unit of Measure","Item Description") .withIgnoreHeaderCase() .withTrim()); int i=0; for (CSVRecord csvRecord : csvParser) { String itemDescription = csvRecord.get("Item Description"); String itemName = csvRecord.get("Unit of Measure"); System.out.println(itemName+" : "+itemDescription); } } catch(Exception e) { e.printStackTrace(); } return null; } } 下的项目。其余的将被忽略,仅打印空白。

我的CSV文件也有所不同,它是直接从item description保存为MS Excel的文件。因此存在空白列等。我不能保证第一列始终为空白,第三列始终为空白等。这就是为什么我需要该程序识别列中的标题并读取其中的数据的原因。

我还必须说,我可以使用.CSV很好地阅读它们。

下面是我的CSV示例。

index

请问该如何解决?

1 个答案:

答案 0 :(得分:0)

如果您想使事情保持简单并使用地图(以列名作为键,以列值作为值),则可以使用CsvMapReader。 Super CSV网站上有使用CsvMapReader进行读写的示例。

写作非常相似。

`ICsvMapReader mapReader = new CsvMapReader(
      new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
 try {
  final String[] headers = mapReader.getHeader(true);
  Map<String, String> row;
  while( (row = mapReader.read(headers)) != null) {
    for (String header : headers) {
      System.out.println(header + " is " + row.get(header));
    }
  }
} finally {
  mapReader.close();
}`