我正在尝试导入大型数据文件并将信息插入到2D数组中。该文件大约有19,000行,由5列组成。我的代码绝对正确,没有运行时错误也没有异常。但问题是,当我尝试打印出数据[15000] [0]时,它表示为null。但我的行确实有15,000行,它应该打印出数组中的元素。但是当我打印出数据[5000] [0]时,它可以工作。什么可能是错的?我在19,000个不同的行中有19,000个城市,但似乎当它大约10,000+时,没有任何东西被存储在2d数组中。请帮忙
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Data1
{
public static void main(String[] args)
{
try{
FileReader file = new FileReader("/Users/admin/Desktop/population.csv");
BufferedReader in = new BufferedReader(file);
String title = in.readLine();
String[][] data = new String[20000][5];
int currentRow = 0;
String current;
int i = 0;
String temp;
while ((temp = in.readLine()) !=null)
{
String[] c = new String[5];
String line = in.readLine().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++;
}
System.out.println(data[15000][0]);
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
答案 0 :(得分:3)
你在每个循环上丢掉一条线。
while (in.readLine() != null)
应该是
String temp;
while ((temp = in.readLine()) != null)
然后在循环中没有调用.readLine(),而是引用“temp”。
答案 1 :(得分:0)
只读一次...
String line=null;
while ((line=in.readLine()) !=null) // reading line once here
{
String[] c = new String[5];
line = line.replaceAll("\"", ""); //
c = line.split(",");
c[1] = c[1].replace(" ", "");
答案 2 :(得分:0)
你的一个错误是循环
while (in.readLine() !=null)
{
String[] c = new String[5];
String line = in.readLine().replaceAll("\"", ""); //changing the format of the data input
c = line.split(",");
c[1] = c[1].replace(" ", "");
每次调用in.readLine()时,它都会读取一行,所以每次都要跳过一行,因为你要调用readline两次(因此读取两行),但只存储第二行。
你应该用它替换它。 String line = in.readLine();
while (line !=null)
{
String[] c = new String[5];
line.replaceAll("\"", ""); //changing the format of the data input
c = line.split(",");
c[1] = c[1].replace(" ", "");
//whatever code you have
//last line of the loop
line=in.readLine();
您能为我们提供几行文件吗?你确定所有文件的格式都正确吗?