Я пытаюсь выполнить итерацию через CSV-файл в Java. Он выполняет итерацию по всему файлу, но дойдет до конца файла и попытается прочитать следующую пустую строку и выбросить ошибку. Мой код ниже.Игнорирование пустых строк в CSV-файле в Java
public class Loop() {
public static void main(String[] args) {
BufferedReader br = null;
String line = "";
try {
HashMap<Integer, Integer> changeData = new HashMap<Integer, Integer>();
br = new BufferedReader(new FileReader("C:\\xxxxx\\xxxxx\\xxxxx\\the_file.csv"));
String headerLine = br.readLine();
while ((line = br.readLine()) != null) {
String[] data = line.split(",");
/*Below is my latest attempt at fixing this,*/
/*but I've tried other things too.*/
if (data[0].equals("")) { break; }
System.out.println(data[0] + " - " + data[6]);
int changeId = Integer.parseInt(data[0]);
int changeCv = Integer.parseInt(data[6]);
changeData.put(changeId, changeCv);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Как я набрал, это работает нормально, пока не дойдет до конца файла. Когда он дойдет до конца файла, я получаю сообщение об ошибке Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at com.ucg.layout.ShelfTableUpdates.main(ShelfTableUpdates.java:23)
. Я прошел через код, отлаживая его в Spring Tool Suite. Ошибка возникает, когда я пытаюсь ссылаться на данные [0] или данные [6]; вероятно, потому что в этой строке ничего нет. Это возвращает меня к моему первоначальному вопросу о том, почему он даже пытается прочесть эту строку в первую очередь.
Было мое понимание, что while ((line = br.readLine()) != null)
обнаружит конец файла, но, похоже, это не так. Я попытался повторно открыть файл и удалить все пустые строки, но это не сработало.
Любая идея, как я могу определить конец файла, чтобы я не получил ошибку в этом коде?
ОТВЕТ: Кредит предоставляется пользователю @quemeraisc. Я также смог заменить запятые пробелами, и если строка тогда равна нулю или «", то вы знаете, что это конец файла; в моем случае, нет пустых строк до конца файла. Это все еще не решает проблему обнаружения конца файла в том случае, если у меня были пустые строки между моими данными, которые не были EOF, тогда это обнаружит их.
Решение 1:
if (data.length < 7) {
System.out.println(data.length);
break;
}
Решение 1:
if (line.replace(",", "").equals(null) || line.replace(",", "").equals("")) {
System.out.println(line.replace(",", ""));
break;
}
Я запускал вашу программу по мере ее публикации и не получал ошибку. – Lani1234