Java Univocity解析器如何读取.csv文件';如果结尾处的行不是.csv数据的一部分,是否正确地保存数据?

Java Univocity解析器如何读取.csv文件';如果结尾处的行不是.csv数据的一部分,是否正确地保存数据?,java,parsing,csv,Java,Parsing,Csv,当.csv文件末尾有行不是.csv数据的一部分时,Univocity解析器如何正确读取.csv文件的数据 文件末尾的注释被解析为.csv数据 下面是代码和堆栈跟踪 任何帮助都将不胜感激 import com.univocity.parsers.csv.CsvParserSettings; import com.univocity.parsers.common.processor.*; import com.univocity.parsers.csv.*; import java.io.Input

当.csv文件末尾有行不是.csv数据的一部分时,Univocity解析器如何正确读取.csv文件的数据

文件末尾的注释被解析为.csv数据

下面是代码和堆栈跟踪

任何帮助都将不胜感激

import com.univocity.parsers.csv.CsvParserSettings;
import com.univocity.parsers.common.processor.*;
import com.univocity.parsers.csv.*;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.lang.IllegalStateException;
import java.lang.String;
import java.util.List;


public class UnivocityParsers {

public Reader getReader(String relativePath) {
    try {
        return new InputStreamReader(this.getClass().getResourceAsStream(relativePath), "Windows-1252");
    } catch (UnsupportedEncodingException e) {
        throw new IllegalStateException("Unable to read input", e);
    }
}


public void columnSelection() {
    RowListProcessor rowProcessor = new RowListProcessor();
    CsvParserSettings parserSettings = new CsvParserSettings();

    parserSettings.setRowProcessor(rowProcessor);
    parserSettings.setHeaderExtractionEnabled(true);
    parserSettings.setLineSeparatorDetectionEnabled(true);
    parserSettings.setSkipEmptyLines(true);

    // Here we select only the columns "Price", "Year" and "Make".
    // The parser just skips the other fields
    parserSettings.selectFields("AUTHOR", "ISBN");

    CsvParser parser = new CsvParser(parserSettings);
    parser.parse(getReader("list2.csv"));

    List<String[]> rows = rowProcessor.getRows();

    String[] strings = rows.get(0);

    System.out.print(strings[0]);

}


public static void main(String arg[]) {

    UnivocityParsers univocityParsers = new UnivocityParsers();

    univocityParsers.columnSelection();


}


}

对于给定的输入文件,需要以下附加设置:

第一:

    parserSettings.setNumberOfRowsToSkip(1);
这告诉解析器忽略第一行,否则它将使用它作为头行

第二:

    parserSettings.getFormat().setComment('*');
最后一行包含以星号开头的注释。此设置使解析器跳过包含此类内容的行


这就是您所需要的。

对于您给定的输入文件,需要以下附加设置:

第一:

    parserSettings.setNumberOfRowsToSkip(1);
这告诉解析器忽略第一行,否则它将使用它作为头行

第二:

    parserSettings.getFormat().setComment('*');
最后一行包含以星号开头的注释。此设置使解析器跳过包含此类内容的行


这就是您所需要的。

您提到了堆栈跟踪,但我没有看到。你刚才是在说文件吗?还有,最后一行在解析形式中是什么样子的?您提到了堆栈跟踪,但我没有看到。你刚才是在说文件吗?另外,最后一行在解析形式中是什么样子的?