Как проверить разделитель / разделитель с помощью библиотеки OpenCSV? - PullRequest
0 голосов
/ 15 июня 2019

На основе библиотеки OpenCVS Я написал следующий код:

@Override
public List<String[]> parseFile() throws IOException, InvalidArgumentException {

    FileReader fileReader = new FileReader(this.getFile());
    CSVParserBuilder csvParserBuilder = new CSVParserBuilder();
    CSVParser parser = csvParserBuilder.withSeparator(CSV_DEFAULT_SEPARATOR).build();
    CSVReader reader = new CSVReaderBuilder(fileReader).withCSVParser(parser).build();

    this.setFileContents(reader.readAll());
    fileReader.close();
    reader.close();

    // validação na mão
    Boolean separatorNotSemicolon = (1 == Arrays.stream(this.getFileContents().get(0)).count());
    if (separatorNotSemicolon) {
        throw new InvalidArgumentException("Separator must be semicolon");
    }

    return this.getFileContents();
}

Мой вопрос: я смотрел в документации библиотеки о том, как проверить, какой разделитель использовался для импортафайл, но единственный способ сделать это был внешний.

Я уже сообщал разделителю, который собираюсь использовать для чтения файла в строке: CSVParser parser = csvParserBuilder.withSeparator(CSV_DEFAULT_SEPARATOR).build();, я ожидал формупроверка из библиотеки, если найден другой используемый разделитель.

Примечание: код функционален, я просто хотел использовать проверку самой библиотеки, она была бы гораздо более надежной, чем простое сравнение, которое я сделал.

Строка (1 == Arrays.stream (this.getFileContents () .get (0)). Count ()) указывает, что даже при использовании разделителя по умолчанию: CSV_DEFAULT_SEPARATOR метод reader.readAll() принес мне несколько строк только с одним столбцом, и я ожидаю более 20 столбцов.Простое, но функциональное сравнение.

Есть идеи по улучшению реализации, которую я сделал под рукой?

...