Я могу прочитать файл с помощью сканера. Когда тип возврата недействителен, я могу читать и печатать данные на консоли, однако сразу же после этого он генерирует исключение ArrayOutOfBoundsException. В идеале, я хочу вернуться как массив строк, однако я получаю только исключение ArrayOutOfBoundsException. В обоих случаях исключение выбрасывается на линии рака [j] = input.nextLine(). Я уже убедился, что размер массива правильный. Когда я не фиксирую его размер, компилятор выдает исключение NullPointerException в той же строке (что имеет смысл, поскольку размер массива не объявлен).ArrayIndexOutOfBoundsException при чтении текстового файла
Мне нужен метод для возврата массива строк, поскольку мне нужно сделать дополнительные манипуляции с ним.
public String[] readCancer() {
cancers = new String[21];
int j = 0;
try {
input = new Scanner(myData);
String result;
while(input.hasNext()) {
++j;
cancers[j] = input.nextLine();
//System.out.println(cancers[j]);
}
} catch (FileNotFoundException fnfx) {
JOptionPane.showMessageDialog(null, "Txt file could not be found");
}
return cancers;
}
Я попытался переписывание метод в несколько иначе, но я получаю ту же ошибку, только на этот раз он находится на выходе [I] = результат;
public String[] readCancers() {
FileInputStream fis;
DataInputStream dis;
BufferedReader br;
InputStreamReader isr;
String result;
String[] output = new String[21];
int i = 0;
try {
fis = new FileInputStream(myData);
dis = new DataInputStream(fis);
isr = new InputStreamReader(dis);
br = new BufferedReader(isr);
while((result = br.readLine()) != null) {
++i;
output[i] = result;
}
} catch (FileNotFoundException fnfx) {
fnfx.printStackTrace();
} catch (IOException iox) {
iox.printStackTrace();
}
return output;
}
Вы увеличиваете j и i, прежде чем делать что-либо с ними. Таким образом, ваш массив начинается с 1 вместо 0, давая вам всего 20 вместо 21 элемента массива. Я предполагаю, что ваш файл имеет 21 элемент, поэтому, когда добавлен 21-й элемент, он выходит за рамки. –
Делая что-то вроде рака [j ++]; даст вам эффект добавления элемента при раках [j], а затем увеличит j в следующий раз. PS Я надеюсь, что вы делаете медицинские вещи, иначе рак - это ужасное имя переменной. –
Чувак, можете ли вы разместить свой текстовый файл, чтобы мы знали, сколько строк в текстовом файле? –