На основе библиотеки 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 столбцов.Простое, но функциональное сравнение.
Есть идеи по улучшению реализации, которую я сделал под рукой?