CSV文件拆分值全部为null

时间:2016-11-06 22:26:48

标签: java

我正在研究这种从csv文件获取数据并将其存储到数组中的方法。我编译的代码但每个数组的值都是" null"。我不知道为什么会这样。

csv文件看起来像这样,但仍然是91行:

星期日,9/1/2016年,,,,, 16:00,20:00
星期一,9/2 / 2016,8:00,12:00 ,,,,
星期二,9/3 / 2016,8:00,12:00,12:00,16:00 ,,
星期三9/4/2016年,,,,, 16:00,20:00
周四,9/5 / 2016,8:00,12:00 ,,,,
周五9/6/2016年,,, 12:00,16:00 ,,
星期六,9个/2016分之7,,,,, 16:00,20:00

public static void getData() throws FileNotFoundException {
    File timeSheets = new File("timeSheets.csv");
    Scanner ts = new Scanner(timeSheets);
    int n = 0, c = 0;

    String temp;

    while (ts.hasNext()) {
        temp = ts.nextLine();
        c++;
    }

    String[] field = new String[8];
    String[] day = new String[c];
    String[] date = new String[c];
    Integer[] morn = new Integer[c];
    Integer[] after = new Integer[c];
    Integer[] night = new Integer[c];

    while (ts.hasNext()) {
        temp = ts.nextLine();
        field = temp.split(",");
        day[n] = field[0];
        date[n] = field[1];

        if (field[4].equals("")) {
            morn[n] = 0;
        } else {
            morn[n] = (int) (Double.parseDouble(field[4].replace(":", "."))
                    - Double.parseDouble(field[3].replace(":", ".")));
        }

        if (field[6].equals("")) {
            after[n] = 0;
        } else {
            after[n] = (int) (Double.parseDouble(field[6].replace(":", "."))
                    - Double.parseDouble(field[5].replace(":", ".")));
        }

        if (field[8].equals("")) {
            night[n] = 0;
        } else {
            night[n] = (int) (Double.parseDouble(field[8].replace(":", "."))
                    - Double.parseDouble(field[7].replace(":", ".")));

        }
        n++;
    }
    System.out.print(day.length);
    System.out.println();
    for (int i = 0; i < day.length; i++) {
        System.out.println(day[i]);
    }

    ts.close();
}

2 个答案:

答案 0 :(得分:1)

我只是尝试运行您的代码。我看到第二次从未被打过。方法ts.hasNext()始终返回false。因为流资源已在第一次读取时被关闭。

解决方案:您应该再次初始化对象扫描程序。

注意:您可以通过打印扫描仪对象来验证我所说的内容。您将得到如下结果:

java.util.Scanner[delimiters=\p{javaWhitespace}+][position=238][match valid=false][need input=false][source closed=true][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q?\E]7

答案 1 :(得分:-1)

您没有阅读该文件。 new File("timeSheets.csv")仅创建对文件的引用。您必须阅读该文件的内容。

有很多库可以轻松完成这项工作。 rt.jar中提供此功能的基本类是FileReader