我正在研究这种从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();
}
答案 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
。