Android File.length() возвращает 0 при записи в него
В моем приложении есть файл журнала, в который постоянно записывается, и иногда мне нужно проверить его размер. Проблема в том, что всякий раз, когда я быстро проверяю его размер в другом потоке, он иногда возвращает 0, хотя в нем явно есть данные.
Например, вывод размера файла будет выглядеть примерно так: (цифры - байты)
E/DataLogger: Size: 3403
E/DataLogger: Size: 3454
E/DataLogger: Size: 3454
E/DataLogger: Size: 3454
E/DataLogger: Size: 0
E/DataLogger: Size: 3500
E/DataLogger: Size: 3500
E/DataLogger: Size: 3812
Я тоже пробовал с FileUtils.readFileToByteArray()
и заметил такое же поведение. Почему оба эти метода иногда возвращают 0 случайно?
2 ответа
Оказывается, я иногда перезаписывал файл, который кратко устанавливал размер файла на 0, прежде чем новые данные могли быть записаны.
Я не знаю, какой API журналирования вы используете, но большинство API журналирования имеют систему ротации, когда файл достигает определенного размера. Когда происходит ротация, регистратор может выполнить некоторые операции перемещения файла или содержимого файла для архивирования фактического файла журнала. Что объясняет размер файла до 0 за раз.
Как правило, вы можете настроить ротацию файлов (размер файла, который запускает ротацию архивирования, количество архивированных журналов и т. Д.)
Чтобы узнать больше, вы можете изучить параметры ротации вашего логирования API.