CSVParser [Apache]-为什么总是忽略第一行(JAVA)

时间:2019-02-22 13:59:06

标签: java apache csv

我不明白为什么它总是忽略第一行...输入:

b,a,c
x,f,ggg

也尝试过:

v,c,c
"v","xxx","x"

我正在使用这段代码:

 public void readFile(String fileName) throws IOException {
        String text = null;
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        try {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();

            while (line != null) {
                sb.append(line);
                sb.append(System.lineSeparator());
                line = br.readLine();
            }

            text = text == null ? sb.toString() : text + "\n" + sb.toString();
        } finally {
            br.close();
            if (parserSet == false) {
                setParser(text, CSVFormat.DEFAULT.withHeader());
            }
        }

setPaser方法类似:

 public void setParser(String textToParse, CSVFormat csvFormat) throws IOException {
     try {
        parserSet = true;
        this.textToParse = textToParse;
        CSVParser parser = CSVParser.parse(this.textToParse, csvFormat);
        records = parser;
        for (CSVRecord r: records) {
            System.out.println("Record: " + r);
            System.out.println("R(" + r.getRecordNumber() + "): " + r.get(0));
        }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

输出是:

  

记录:CSVRecord [注释=空,映射= {b = 0,a = 1,c = 2},   recordNumber = 1,值= [x,x,tss]]

     

R(1):x

所以似乎总是忽略第一行...我希望recordNumber = 1的值= [b,a,c] ...我需要那些值。

编辑:以旧的方式,我使用了record.toMap()。entrySet(),从那里我得到了第一行值,但是它们的顺序不正确(示例b,a,c返回为a,b,c)我需要值的原始顺序

1 个答案:

答案 0 :(得分:1)

您正在告诉解析器有一个标头:

setParser(text, CSVFormat.DEFAULT.withHeader());

因此第一行用于列标题/名称。