Я использую BufferedReader для чтения файла .csv. У меня нет проблем с чтением файла и извлечением данных. Однако проблема, которая у меня есть, заключается в том, что мне нужно жестко закодировать объявление моего массива. Например:
String[][] numbers=new String[5258][16];
В файле .csv, который я использовал, было 5258 строк и 16 столбцов. Я хотел бы иметь возможность сделать что-то вроде этого:
String[][] numbers=new String[rowsInFile][16];
Другими словами, я хочу, чтобы переменная rowsInFile была эквивалентна количеству строк в файле (я не хочу считать столбцы, потому что каждый файл .csv, который я буду запускать в этой программе, имеет 16 столбцов).
Вот код, который у меня есть до сих пор:
int row = 0;
int col = 0;
String fileInput = JOptionPane.showInputDialog(null,
"Please enter the path of the CSV file to read:");
File file = new File(fileInput);
BufferedReader bufRdr;
bufRdr = new BufferedReader(new FileReader(file));
String line = null;
//get rows in the file
int rowsInFile = 0;
while(bufRdr.readLine() != null) {
rowsInFile++;
row++;
}
String[][] numbers=new String[rowsInFile][16];
//read each line of text file
row = 0;
while((line = bufRdr.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line,",");
col=0;
while (st.hasMoreTokens()) {
//get next token and store it in the array
numbers[row][col] = st.nextToken();
col++;
}
row++;
}
Однако я получаю исключение нулевого указателя. Есть идеи, что мне делать?
P.S. Да, этот код окружен оператором try/catch.