java - 读取 CSV 文件直到特定列号

标签 java csv

我正在读取 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/

相关文章:

java - 为什么 ArrayList 没有使用运行时输入进行初始化?

java - HttpClient 只响应一行 XML

python - 在python中导入/读取csv文件,然后绘图,给出x=y图?

php - 比较两个 CSV 文件并更新主 CSV 上的价格

excel - 在 A 相同的地方添加 B [在 excel 中]

带有 Collection 对象的 Java UnsupportedOperationException

java - 如何判断一个三位数是否是回文数?

java - 如何搜索和过滤 fragment 中的文本

javascript - 在 Node 中使用 d3 读取 csv 数据的最佳实践。为什么会出现 TypeError?

c++ - 在 C++ 中将 JSON 转换为 CSV