【发布时间】:2020-11-29 17:32:44
【问题描述】:
numberOfFields() 方法应该找出 csv 文件的特定行中存在多少列。我期待 7 但我的输出结果为 0;这就是我将 cols 初始化为的内容。所以我在while循环中使用了system.out.println(),我发现while循环没有被输入。我的文件有很多文本行,所以我不明白为什么 readLine() 返回 null。不知道我还有什么可能错的地方。
public class CSVReader {
public BufferedReader bR1;
public CSVReader(String fileName) throws IOException {
bR1 = new BufferedReader(new FileReader(fileName));
}
public int numberOfFields(int row) throws IOException {
int rows = 1;
while (rows < row) {
bR1.readLine();
rows++;
}
int cols = 0;
String line;
while ((line=bR1.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, ",");
while (st.hasMoreElements()) {
st.nextToken();
cols++;
}
}
return cols;
【问题讨论】:
-
据我所知,这取决于您如何调用
numberOfFields方法。row的值是多少?因为如果您在第一个 while 循环中跳过整个 csv 文件,则在第二个 while 循环中没有任何行可供读者读取。您应该研究这种行为,并解释您通过第一个循环尝试实现的目标。 -
如果您不止一次调用
numberOfFields(),除了第一次调用之外的所有调用都会失败,因为bR1不再位于文件的开头。它实际上位于文件的末尾,因为第一次调用离开阅读器的位置。 -
@Andreas 事实上,我不止一次地调用了这个方法和另一种方法(numberOfRows()),我相信你已经解决了这个问题。现在,在调用 numberOfRows() 以找出文件中的行数后,指针位于文件的末尾。有没有办法将指针重新定位到文件的开头?
-
@maloomeister 电话是:numberOfFields(10);我希望找出第 10 行中的字段数。第一个 while 循环 (rows
标签: java csv file-io null readline