34

Apache Commons CSVライブラリを使用して CSV ファイルを解析しているときに、次のエラーが発生します。

Exception in thread "main" java.io.IOException: (line 2) invalid char between encapsulated token and delimiter

at org.apache.commons.csv.Lexer.parseEncapsulatedToken(Lexer.java:275)
at org.apache.commons.csv.Lexer.nextToken(Lexer.java:152)
at org.apache.commons.csv.CSVParser.nextRecord(CSVParser.java:450)
at org.apache.commons.csv.CSVParser.getRecords(CSVParser.java:327)
at parse.csv.file.CSVFileParser.main(CSVFileParser.java:29)

このエラーの意味は何ですか?

4

5 に答える 5

48

データに見積もりを埋め込んだときに、この問題に遭遇しました。

0,"020"1,"BS:5252525  ORDER:99999"4

適用されたソリューションはCSVFormat csvFileFormat = CSVFormat.DEFAULT.withQuote(null);

@Cugaのヒントが解決に役立ちました。ありがとう@Cuga

完全なコードは

    public static void main(String[] args) throws IOException {
    FileReader fileReader = null;
    CSVFormat csvFileFormat = CSVFormat.DEFAULT.withQuote(null);
    String fileName = "test.csv";

    fileReader = new FileReader(fileName);
    CSVParser csvFileParser = new CSVParser(fileReader, csvFileFormat);

    List<CSVRecord> csvRecords = csvFileParser.getRecords();

    for (CSVRecord csvRecord : csvRecords) {
        System.out.println(csvRecord);
    }
    csvFileParser.close();
}

結果は

CSVRecord [comment=null, mapping=null, recordNumber=1, values=[0, "020"1, "BS:5252525  ORDER:99999"4]]
于 2016-03-31T09:55:10.503 に答える
7

問題の解決策を見つけました。私の CSV ファイルの 1 つに次のような属性があります

属性に引用符がネストされているため、パーサーが失敗します。

上記の問題を回避するには、ネストされた引用符を次のようにエスケープします

これが問題を解決する 1 つの方法です。

于 2014-11-04T12:05:07.523 に答える