Как читать текстовый файл [.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() это сигнализирует о необходимости продолжить чтение. Реализация займет пару минут, поэтому я оставляю это вам в качестве упражнения.

Другие вопросы по тегам