Есть такой код, читающий файл:
// Reading lines from a file.
String fileName = defineFileName(path.toString());
List<String> lines = Files.readAllLines(Paths.get("C:\\Users\\Николай\\Documents\\TestSMS\\" + fileName));
String line1 = lines.get(0);
String line2 = lines.get(3);
String TextMessages = lines.get(13);
Если lines.get(0)
- пустая строка, а lines.get(13)
- не пустая, то IndexOutOfBoundsException
не выбрасывает. Но если lines.get(13)
- пустая строка в файле, то получаю:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 13, Size: 13
at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:665)
at java.util.ArrayList.add(ArrayList.java:477)
at com.app.sms.reader.impl.SimpleSmsReader.smsReader(SimpleSmsReader.java:103)
at com.app.sms.reader.impl.SimpleSmsReader.readSms(SimpleSmsReader.java:64)
at com.app.workflow.impl.SimpleSmsWorkflow.processSms(SimpleSmsWorkflow.java:32)
at com.app.starter.Main.main(Main.java:38)
Метод Files.readAllLines
использует BufferedReader: добавляет в свой список строки, полученные вызовом метода readLine у reader-a, до тех пор, пока не получит в качестве строки null
, что означает окончание потока данных. Звучит логично
Проблема в том, что метод readLine
у BufferedReader
возвращает null
для последней строки, если у неё длина 0 (она пустая). По крайней мере, если судить по исходникам в JDK 1.8.0_131. Баг это или так и задумывалось, и менялось ли это в более новых версиях - не знаю
В итоге если нужно учитывать пустую строку в коде файла, то придётся читать файл более низкоуровневно
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как выбрать список сущностей с кастомным набором атрибутов через Criteria API, если у сущности есть связанная коллекция других сущностей? ЗдравствуйтеЕсть...
В программировании я довольно молод и неопытенПотому не удаётся мне реализовать одно дельце