4
我需要能夠知道何時從文件讀取了最後一條記錄(或者換句話說,我需要知道何時下一個讀取將返回EOF)。我寧願通過獲取當前文件位置來確定這一點,而不是嘗試提前讀取並保持1深度隊列。如何在Java中順序讀取期間獲取當前文件位置?
下面演示了我遇到的問題:不幸的是,事實證明,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);
}
}
我已經得到整個文件的大小,使用myFileChannel.size()..(除非結果是什麼* *是什麼驚喜)。保持每條輸入線的長度是我的後備位置;它不是理想的,因爲必須找出行分隔符的長度。 – Chap