我不明白为什么它总是忽略第一行...输入:
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),我需要原始值的顺序
最佳答案
您正在告诉解析器有一个标头:
setParser(text, CSVFormat.DEFAULT.withHeader());
因此,第一行用于列标题/名称。
关于java - CSVParser [Apache]-为什么总是忽略第一行(JAVA),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54828709/