如何读取java中具有空列的CSV文件以及仅包含一些数据的少数列?

时间:2017-06-05 08:48:06

标签: java csv stream

我有我的Test.csv文件,如下所示,现在我想通过跳过空列来读取csv文件(使用JAVA)。 如果总列为空,那么我想跳过该列

111, ,John,2000,   ,US 
222, ,Alle,3000,   ,China
333, ,Kite,4000,LCD,IND
444, ,King,5000,LED,Aust

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
    public class Test {
        public static void main(String[] args) 
        {
            Scanner s = null;
            try {
                s = new Scanner(new File("D:/sri/Test.txt"));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            while (s.hasNextLine()) {
                String line = s.nextLine();
            }
        }
    }

在这里我也可以读取空列。请你就此建议

2 个答案:

答案 0 :(得分:1)

我建议您使用SuperCSV和CsvBeanReader,您可以自定义CellProcessor以在数据为空时忽略行。 SuperCSV document

一个简单的解决方案是使用CsvReader并逐行读取,然后在解析器之后检查每个数据。一旦你得到一个空字符串,然后移动到下一行! CSV Reader Document

答案 1 :(得分:1)

您可以使用util方法检查它是否为空字符串。

public static boolean isBlank(String str) {
        int strLen;
        if (str == null || (strLen = str.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if ((Character.isWhitespace(str.charAt(i)) == false)) {
                return false;
            }
        }
        return true;
    }

并在您的阅读器中使用它,如下所示

Scanner s = null;
        try {
            s = new Scanner(new File("D:/sri/Test.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        while (s.hasNextLine()) {
            String[] line = s.nextLine().split(",");
            for (String element : line) {
                if (!isBlank(element))
                    System.out.println(element);
            }

        }