读取CSV文件直到特定的列号

时间:2014-11-15 13:14:31

标签: java csv

我正在阅读csv文件方法 -

public ArrayList<String> fileRead(File f) throws IOException {
        FileReader fr = new FileReader(f);
        BufferedReader br = new BufferedReader(fr);
        ArrayList<String> CSVData = new ArrayList<String>();
        String text;
        try {
            while ((text = br.readLine()) != null) {
                CSVData.add(text);
                log.debug(text);
            }
            log.info(f + ": Read successfully");

            br.close();
            fr.close();
        } catch (IOException e) {
            log.error("Error in reading file " + e.getMessage());
        }
        return CSVData;
    }

但我想读取文件直到定义的列号,例如到第20列, 但如果介于两者之间,我会找到某个列的空单元格然后如上面的代码那样它将退出(text = br.readLine())!= null, 所以最后我的问题是如何读取CSV文件,直到特定列为空单元格或其应该读取的任何内容,直到那些列和用于移动下一行的断点应为该列示例第20列,

提前感谢您的帮助和支持

1 个答案:

答案 0 :(得分:1)

您应该使用uniVocity-parsers' column selection feature来处理您的文件。

以下是一个例子:

CsvParserSettings settings = new CsvParserSettings();
parserSettings.selectFields("Foo", "Bar", "Blah");
// or if your file does not have a row with column headers, you can use indexes:
parserSettings.selectIndexes(4, 20, 2);
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new FileReader(f));

披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。

请勿尝试自行解析CSV。那里有许多错综复杂的东西。例如,使用您粘贴的代码:

while ((text = br.readLine()) != null) {

只要您的CSV包含包含换行符的值,就会中断。