如何获取JAVA文件中最后一次写入的位置?

如何获取JAVA文件中最后一次写入的位置?,java,file-io,java-io,randomaccessfile,Java,File Io,Java Io,Randomaccessfile,我想写一个循环日志文件: 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 { //BufferedOutputSt

我想写一个循环日志文件:

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(成本很高,而且与您的目标相符,有些困难)


您处理的文件太大,以至于无法使用数据结构解析文件并在刷新之前保留输出吗?它将需要最少的计算量,最大限度地减少I/O读/写操作,同时使其更易于使用

这还不是很清楚。查看代码时,输出应以
这是第1行开始
为什么1400、2、3、4不正确,但12、4、5、6很好?即使您得到最后一个写入位置(从何处?magic?),当您想要更改旧行的长度、读取、移动后续文件内容时,这对您没有帮助。这个问题是否得到了文件指针的位置,并将其存储在代码中?然后,当您想知道文件指针移动到哪里时,它将打印最近的9个位置?或者它会打印列表中的所有内容?我同意@davidhxxx,第一行是“这是第1行”,而不是第10行。您是在覆盖还是追加文件?
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