私は、ファイルから最後のレコードを読んだとき知ってできるようにする必要があります(別の言い方をする、または次読み込みが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