наша внутренняя программа читает текстовый файл и обрабатывает что-то построчно.
для чтения файла построчно, использует bufferedReader.readLine
.
, но иногда, раз в квартал, bufferedReader
не может прочитать всю строку.
, если на самом деле существует 1000 строковый файл, readLine()
просто прочитайте 1 ~ 530.
Я уверенфайл хорошо сформирован.когда я пытаюсь снова прочитать файл после этой ошибки, он может полностью прочитать всю строку.
этот файл загружен через FTP и пакет средства просмотра файлов для обнаружения файла запущен.
ниже указан код:
String fromFilePath = "/DATA/EXAMPLE.TXT"; //upload filepath example
String toFilePath = "/DATA/PROC/EXAMPLE.TXT"; //filepath to move
//read file after moving to another directory, to avoid catching file by file watcher and file in target path never exist.
Files.move(Paths.get(fromFilePath), Paths.get(toFilePath), java.nio.file.StandardCopyOption.REPLACE_EXISTING, java.nio.file.StandardCopyOption.ATOMIC_MOVE);
BufferedReader br = new BufferedReader((new InputStreamReader(new FileInputStream(toFilePath, "UTF-8")));
int fileRowCount = 0;
String readLineResult = null;
while(readLineResult = br.readLine() != null){
fileRowCount++;
doBusinessLogic(readLineResult);
}
log.info("file log count {}", fileRowCount);
//confirm process to solve this problem.
br = new BufferedReader((new InputStreamReader(new FileInputStream(toFilePath, "UTF-8")));
int assertCount= 0;
while(br.readLine() != null){
assertCount++;
}
//it always print 'true' when occuring error, although BufferedReader is initialized newly
log.info("assert {}", assertCount==fileRowCount);
fileRowCount
не может печатать весь номер строки.конечно, doBusinessLogic
также выполняется частично.
ОС: redhat 7.4
Java-версия: 1.7.0_181