我正在阅读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列,
提前感谢您的帮助和支持
答案 0 :(得分:1)
您应该使用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包含包含换行符的值,就会中断。