基于库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列以上。一个简单但实用的比较。
有什么想法可以改善我手头的实现吗?