Я использую BufferedReader для чтения файла .csv.У меня нет проблем с чтением файла и извлечением данных.Однако проблема, с которой я сталкиваюсь, заключается в том, что я должен жестко закодировать объявление массива.Например:
String[][] numbers=new String[5258][16];
Файл .csv, который я использовал, имел 5258 строк и 16 столбцов.Я хотел бы иметь возможность сделать что-то вроде этого, хотя:
String[][] numbers=new String[rowsInFile][16];
Другими словами, я хочу, чтобы переменная 'columnsInFile' была эквивалентна количеству строк в файле (я нехочу посчитать столбцы, потому что каждый файл .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++;
}
Однако я 'получаю исключение нулевого указателя.Любые идеи о том, что я должен делать?
PS Да, этот код окружен оператором try / catch.