Как получить текущую позицию файла во время последовательного чтения в Java? - PullRequest
4 голосов
/ 20 июня 2011

Мне нужно знать, когда я прочитал последнюю запись из файла (или, другими словами, мне нужно знать, когда чтение next вернет EOF). Я бы предпочел определить это, получив текущую позицию файла, а не пытаясь читать вперед и поддерживать очередь глубиной 1.

Следующая проблема демонстрирует мою проблему: к сожалению, оказывается, что myFileChannel.position (), кажется, сообщает мне смещение к первой позиции , которая не была прочитана в буфер . Например, после первого readline () position () возвращает 8192.

Есть ли метод, с помощью которого я могу получить смещение первого символа, который не был использован readline ()?

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.channels.FileChannel;

public final class FilePosition {

    public static void main(String[] args) {
        String            myFileName = args[0];
        File              myFile; 
        FileInputStream   myInputStream;
        InputStreamReader myInputStreamReader; 
        FileChannel       myFileChannel;
        BufferedReader    myBufferedReader;
        long              myFileSize;
        long              myFilePosition;

        String absDirPath = "/Users/chap/Documents/workspace/FilePosition/bin/";
        myFileName = args[0];

        try {
            myFile              = new File(absDirPath + myFileName);
            myInputStream       = new FileInputStream(myFile);
            myInputStreamReader = new InputStreamReader(myInputStream);
            myBufferedReader    = new BufferedReader(myInputStreamReader);

            myFileChannel = myInputStream.getChannel();
            myFileSize    = myFileChannel.size();

            String inputLine = "";
            while (inputLine != null) {
                inputLine = myBufferedReader.readLine();
                // myFilePosition = ?
                myFilePosition = myFileChannel.position();
                say(inputLine + "   Size=" + myFileSize + ", Pos=" + myFilePosition);
            }

        }
        catch (Exception e) {
            say("Exception caught opening file " + 
                    myFileName + ": " + e.getMessage());
            return;
        }
    }

    private static void say(String s) {
        System.out.println(s);
    }
}

1 Ответ

0 голосов
/ 20 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...