2013-05-29 3 views
2

Это мое понимание относительно чтения файла с использованием BufferedReader в java. Пожалуйста, поправьте меня, если я ошибаюсь где-то ...Как я могу прочитать файл несколько раз в java

В последнее время у меня было требование, когда мы должны читать файл несколько раз.

Обычный способ, который я использую, устанавливает mark() и выполняет сброс. Но входные параметры для Знак представляет собой целое число, и он не может принять длинное число. Есть ли способ, которым мы можем прочитать файл, много раз.

В C++ мы можем сделать запрос на fstream и read содержимом один раз, независимо от того, сколько раз мы хотим это сделать. Есть ли что-нибудь в java, которое имеет такую ​​природу.

+3

Mayb ['RandomAccessFile'] (http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html) может помочь – MadProgrammer

+0

Действительно ли вы хотите выделить буфер с размером более 2 миллиардов? Из javadoc: «* Попытка сброса потока после считывания символов до этого предела или за его пределами может выйти из строя. Предельное значение, превышающее размер входного буфера, вызовет ** новый буфер, который будет выделен, размер которого не меньше чем предел. Поэтому большие значения следует использовать с осторожностью **. * « – assylias

+2

Посмотрите на java.io.RandomAccessFile –

ответ

1

Не очень хороший ответ, но если вы хотите сделать случайное чтение и письмо, вы можете использовать Channels в пакете java.nio.

BufferedReader предназначен для чтения файла, когда вы логически видите его в виде серии записей и записей, к которым обычно обращаются последовательно.
Channel s позволяет просматривать ваш файл в виде серии блоков. Блоки предназначены для чтения случайным образом. :)

Используя подкласс канала, FileChannel, вы можете читать, что хотите, где бы вы ни находились. Вам необходимо указать две вещи:

  1. Место для чтения.
  2. Сколько нужно читать.

Он имеет read(dst,pstn) где dst является ByteBuffer и ТфОП является long положение.

Не волнуйтесь, что это abstract, потому что вы использовать его через Files.newByteChannel(), который делает все необходимое Вуду чтобы заставить его работать :)

3

Просто закройте файл и читать его снова.

Но пересмотреть свое требование. Почему вы не можете обработать его за один проход?

+0

Да - чтение файла несколько раз - это _solution_ not a_requirement_ Есть ли лучшее решение? –

Смежные вопросы