Я пишу фрагмент кода Java, который читает данные из TXT-файла и сохраняет его в 2D-массиве. Для некоторых файлов код работает отлично, но для других файлов он генерирует исключение ArrayIndexOutOfBoundsException, хотя, насколько я могу судить, массив имеет достаточно места!Array Index за пределами границ, хотя достаточно свободного места
Вот код:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ExtractData {
static String[][] data;
static String line;
static int amountOfEntries;
static int amountOfSeparators;
public static String[][] getData(String filename) throws IOException {
BufferedReader in = new BufferedReader(new FileReader(filename));
System.out.println("Fetching data for file " + filename);
amountOfEntries = Utilities.countLines(filename);
amountOfSeparators = (Utilities.countOccurencesOfCharacter(filename, ' ')/amountOfEntries) + 1;
String[] temp = new String[amountOfEntries]; // for extracted data, still needs to be separated
int alpha = 0;
while((line = in.readLine()) != null) {
temp[alpha] = line;
alpha++;
}
in.close();
System.out.println("Done!");
System.out.println("Parsing Data to Cache...");
String[][] parsedData = new String[amountOfEntries][amountOfSeparators];
String[] parts = new String[amountOfSeparators];
for (int i = 0; i < amountOfEntries; i++) {
parts = (temp[i]).split(" ");
for (int k = 0; k < amountOfSeparators; k++) {
parsedData[i][k] = parts[k];
Utilities.debugMethod(filename + "[" + i + "][" + k + "]", parsedData[i][k]);
}
}
System.out.println("Done!");
return parsedData;
}
public static void fetchDataAndParsetoSQL(String filename) throws IOException {
System.out.println("Present working directory: " + System.getProperty("user.dir"));
data = getData(filename);
System.out.println("Creating SQL statements and writing to file...");
String tablename = Utilities.sqltableName(filename);
toSQL.SQLOutput(data, tablename, filename);
System.out.println("Done!");
}
}
я получаю исключение на линии
parsedData[i][k] = parts[k];
Это очень раздражает, и я не могу найти ответ на проблемы в любом месте, особенно так как даже с текстовыми файлами, на которых он не работает, он все еще правильно разбирает первые 60 строк файла, прежде чем бросать исключение.
У кого-нибудь есть идея, что может вызвать это?
Просьба показать точное исключение вместе со значениями 'i' и' k'. Обратите внимание, что код, который вы представили, даже не компилируется, так как '' '' не является допустимым символьным литералом. –
Не должно ли условие цикла учитывать детали []? – dly
Исключение указывает размер массива и используемое значение индекса. Один из них - это не то, что вы ожидаете. И * всегда * указывайте сообщение об ошибке * whole * и * exact *, когда вы жалуетесь на ошибку. –