Как читать текстовый файл [.log file] каждые 1Mb
У меня есть большой файл журнала, и я хочу прочитать его 1Mb по одному.
Пример. У меня есть текстовый файл на 100 МБ, и я хочу читать 1 МБ за один раз. Это нужно 100 раз.
Любые соответствующие идеи?
2 ответа
Вы можете передать ваш файл в InputStream и вызвать функцию read(byte[] b, int off, int len) и передать общее количество байтов, которые нужно прочитать в len, и передать правое смещение в off или просто использовать read(), чтобы прочитать один байт InputStream и передать цикл вокруг этого утверждения
for(int i = 0; i < 1048576; i++)
{
input.read();
//do something with the input
}
Самый простой подход - если вам не нужно читать с точностью до 1 МБ, то есть вы должны просто читать файл построчно, а когда он превышает 1 М, остановитесь. В этом случае просто посчитайте прочитанные вами байты: 1
BufferedReader reader = new BufferedReader(new InputStremReader(new FileInputStream(myfile)));
Stirng line = null;
int bytesCount = 0;
while((line = reader.nextLine()) != null) {
// process the line
bytesCount += line.getBytes().length;
if (bytesCount > 1024*1024) {
// 1MB reached. Do what you need here.
}
}
Однако, если вам нужен 1M резкий, задача немного сложнее, потому что вы все еще хотите использовать удобные инструменты для чтения текста, такие как BufferedReader
, В этом случае создайте свой собственный поток ввода, который подсчитывает байты и переносит другой поток ввода. Как только предел достигнут, ваш поток должен вернуться -1
как маркер EOF. Однако следует реализовать метод reset()
это сигнализирует о необходимости продолжить чтение. Реализация займет пару минут, поэтому я оставляю это вам в качестве упражнения.