2010-03-19 6 views
1

У меня возникли проблемы с классом FileReader.Вопрос о Java File Reader

Как указать смещение в строках, через которые оно проходит, и как мне сказать, когда остановиться? Предположим, я хочу, чтобы он проходил каждую строку в TXT-файле, но только линии 100-200, а затем останавливались?

Как мне это сделать? Прямо сейчас я использую ReadLine(), но я не думаю, что есть способ указать смещение с этим.

Любая быстрая помощь ОЧЕНЬ высоко оценена. Благодарю.

+1

java.io.FileReader не имеет метод с ReadLine(). java.io.BufferedReader делает. Предполагаю, вы имеете в виду BufferedReader? –

ответ

2

Прочитайте все строки, но используйте другую переменную, чтобы подсчитать, в какой строке вы находитесь. Вызовите continue, если вы находитесь на линии, которую вы не хотите обрабатывать (скажем, до 100-й строки) и break, когда вы не хотите обрабатывать больше строк (после 200-й строки).

+0

Конечно. Благодарю. –

3
  1. Вы не можете. FileReader считывает символ за раз или по очереди за раз. Очевидно, вы можете написать свой собственный код, расширяющий или обертывающий его, чтобы перейти к ненужным строкам.

  2. В сторону: ОСТОРОЖНО, используя FileReader или FileWriter - они используют набор символов LOCALE по умолчанию. Если вы хотите заставить набор символов использовать OutputStreamWriter или InputStreamReader. Пример

Писатель ш = новый FileWriter (файл) может быть заменен на Writer ш = новый OutputStreamWriter (новый FileOutputStream (файл), "UTF-8"); < === Посмотрите, как я могу установить набор символов.

  1. Альтернатива: Если у вас есть текст FIXED-WIDTH, посмотрите на RandomAccessFile, который позволяет вам искать любую позицию. Это не поможет вам, если у вас нет текста фиксированной ширины или индекса для перехода к строке. Но это удобно :)
1

Невозможно сказать читателю только чтение определенных строк, вы можете просто использовать счетчик, чтобы сделать это.

try { 
    BufferedReader in = new BufferedReader(new FileReader("infilename")); 
    String str; 
    int lineNumber = 0; 

    while ((str = in.readLine()) != null) { 
     lineNumber++; 

     if (lineNumber >= 100 && lineNumber <= 200) { 
      System.out.println("Line " + lineNumber + ": " + str); 
     } 
    } 

    in.close(); 
} catch (IOException e) { } 
0
BufferedReader in = new BufferedReader(new FileReader("foo.in")); 
for(int i=0;i<100;i++,in.readLine()){} 
String line101 = in.readLine();