Вопрос о Java File Reader - PullRequest
       26

Вопрос о Java File Reader

1 голос
/ 19 марта 2010

У меня проблемы с классом FileReader.

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

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

ОЧЕНЬ приветствуется любая быстрая помощь. Спасибо.

Ответы [ 4 ]

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

  2. В сторону: будьте осторожны, используя FileReader или FileWriter - они используют набор символов LOCALE по умолчанию. Если вы хотите форсировать набор символов, используйте OutputStreamWriter или InputStreamReader. Пример

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

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

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

1 голос
/ 19 марта 2010

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

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 голосов
/ 19 марта 2010
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
for(int i=0;i<100;i++,in.readLine()){}
String line101 = in.readLine();
...