当我运行这个程序时,我得到一个异常,它的大文件充满了数据,我试图从该文件导入数据并将信息插入到2d数组中,但是,该文件包含大约19,000行。 虽然,我的程序停止运行并告诉我在此过程中没有行。我的例外是java.util.NoSuchElementException:找不到行 at java.util.Scanner.nextLine(Scanner.java:1585) 在Data.main(Data.java:30)
请帮忙,有什么不对?
import java.util.Scanner;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Data
{
public static void main(String[] args)
{
try{
java.io.File file = new java.io.File("/Users/admin/Desktop/data.csv");
Scanner in = new Scanner(file);
String title = in.nextLine();
String[][] data = new String[19517][5];
int currentRow = 0;
String current;
int i = 0;
while (in.hasNextLine())
{
String[] c = new String[5];
String line = in.nextLine().replaceAll("\"", ""); //changing the format of the data input
c = line.split(",");
c[1] = c[1].replace(" ", "");
for (int j = 0; j <data[0].length; j++)
{
current = c[j];
data[i][j] = c[j];
}
i++;
}
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
答案 0 :(得分:2)
由Enumeration的nextElement方法抛出以指示 枚举中没有其他元素。
表示您正在尝试读取非现有数据。发生这种情况是因为while
循环中的条件始终满足,导致nextLine
尝试读取不存在的行。您应该将while
循环更改为:
while(in.hasNextLine())
如果有要阅读的行,这样可以确保nextLine
仅适用于
我制作了一个虚拟的csv
文件,它确实阅读了所有的行。
使用调试器会对你有所帮助,我强烈建议你使用它。
答案 1 :(得分:1)
您的文件和代码中没有19518行,您要求它读取很多行。 (标题+ 19517 = 19518)。
永远不要硬编码文件中期望的行数。如果您对某个数字进行硬编码,请对您需要的最小数字进行硬编码,以使代码正常工作。