0
私は、円形のログファイル書き込みたい:私は上記の結果をしたいが、私は私が最後の位置を取得することはできません見つかっ最後にJAVAでファイルに書き込んだ位置を取得するには?
This is Line 1400
s is Line 2
This is Line 3
This is Line 4
This is Line 5
This is Line 6
This is Line 7
This is Line 8
This is Line 9
ない
This is Line 10
This is Line 11
This is Line 12
This is Line 4
This is Line 5
This is Line 6
This is Line 7
This is Line 8
This is Line 9
:
public class CircularLogFile {
public static final String LOG_FILE_NAME = "circular.log";
public static final int LOG_FILE_SIZE_MAX = 256;
public static void write(String line) throws IOException {
//BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(logFileName, true));
RandomAccessFile raf = new RandomAccessFile(LOG_FILE_NAME, "rw");
System.out.println("file size: "+raf.length());
System.out.println("file pointer: "+raf.getFilePointer());
if (raf.length() >= LOG_FILE_SIZE_MAX && raf.getFilePointer() >= LOG_FILE_SIZE_MAX) {
raf.seek(0);
} else if (raf.length() >= LOG_FILE_SIZE_MAX && raf.getFilePointer() < LOG_FILE_SIZE_MAX) {
} else if (raf.length() < LOG_FILE_SIZE_MAX) {
raf.seek(raf.length());
}
raf.writeChars(line+"\n");
raf.close();
}
public static void main(String[] args) throws IOException {
int lineNumber = 0;
while (true) {
lineNumber++;
write("This is Line "+lineNumber);
}
}
}
出力をファイルに手紙を書いて、どうやって得るの?
との作業を最小限に抑えながら、最小限の計算でI/Oの読み書きを最小限に抑えることができます。 あなたのコードを見れば、出力は 'This is Line 1'で始まるはずです – davidxxx
1400,2,3,4が間違っていますが、12,4,5,6は問題ないのはなぜですか? – csmckelvey
最後の書き込み位置(どこから?magic?)を取得しても、古い行の長さを変更したいときに役立たない場合でも、後続のファイル内容を読み込みます。 – Holger