就我而言,有效的CSV是用逗号或分号分隔的。我对其他库开放,但是它必须是Java。通过阅读Apache CSVParser API,我唯一能想到的就是做到这一点,这看起来效率低下又难看。
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(file));
CSVFormat csvFormat = CSVFormat.EXCEL.withHeader().withDelimiter(';');
CSVParser parser = csvFormat.parse( reader );
// now read the records
}
catch (IOException eee)
{
try
{
// try the other valid delimeter
csvFormat = CSVFormat.EXCEL.withHeader().withDelimiter(',');
parser = csvFormat.parse( reader );
// now read the records
}
catch (IOException eee)
{
// then its really not a valid CSV file
}
}
有没有一种方法可以先检查定界符,或者允许两个定界符?除了捕捉异常之外,还有谁有更好的主意?
最佳答案
我们在uniVocity-parsers中建立了对此的支持:
public static void main(String... args) {
CsvParserSettings settings = new CsvParserSettings();
settings.setDelimiterDetectionEnabled(true);
CsvParser parser = new CsvParser(settings);
List<String[]> rows = parser.parseAll(file);
}
解析器还有许多其他功能,我相信您会发现它有用。试试看。
免责声明:我是该库的作者,它是开源的并且免费(apache 2.0许可)