我不明白为什么它总是忽略第一行...输入:
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)我需要值的原始顺序
答案 0 :(得分:1)
您正在告诉解析器有一个标头:
setParser(text, CSVFormat.DEFAULT.withHeader());
因此第一行用于列标题/名称。