我正在读取 csv 文件方法,如下 -
public ArrayList<String> fileRead(File f) throws IOException {
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
ArrayList<String> CSVData = new ArrayList<String>();
String text;
try {
while ((text = br.readLine()) != null) {
CSVData.add(text);
log.debug(text);
}
log.info(f + ": Read successfully");
br.close();
fr.close();
} catch (IOException e) {
log.error("Error in reading file " + e.getMessage());
}
return CSVData;
}
但我想读取文件直到定义的列号,例如直到第20栏, 但如果在中间我会发现某些列的空单元格,那么如上面的代码它将退出 (text = br.readLine()) != null , 所以最后我的问题是如何读取 CSV 文件直到特定列,无论是空单元格还是它应该读取的任何内容,直到这些列和移动下一行的断点应该是该列示例第 20 列,
预先感谢您的帮助和支持
最佳答案
您应该使用uniVocity-parsers' column selection feature处理您的文件。
这是一个例子:
CsvParserSettings settings = new CsvParserSettings();
parserSettings.selectFields("Foo", "Bar", "Blah");
// or if your file does not have a row with column headers, you can use indexes:
parserSettings.selectIndexes(4, 20, 2);
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new FileReader(f));
披露:我是这个库的作者。它是开源且免费的(Apache V2.0 许可证)。
不要尝试自己解析 CSV。这里面有很多错综复杂的事情。例如,使用您粘贴的代码:
while ((text = br.readLine()) != null) {
一旦您的 CSV 包含包含换行符的值,就会中断。
关于java - 读取 CSV 文件直到特定列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26946212/