Java 安全地获取文件结尾的文件指针

Java 安全地获取文件结尾的文件指针,java,file-io,Java,File Io,我想在文件中添加一行文本-但是,我想获得字符串在文件中的位置,这样我就可以使用RandomAccessFile和file.seek()直接访问字符串 问题是很多文件i/o操作都是异步的,写操作可能在很短的时间间隔内发生——这意味着异步写,因为其他操作都是低效的。如何确保文件指针计算正确?我是Java的新手,还不了解文件I/O的不同方法的细节,所以请原谅我的问题,如果使用BufferedWriter正是我想要的,那么您如何获得它的当前长度 编辑:不能读取整个文件。文件很大,正如我所说,写入操作经常

我想在文件中添加一行文本-但是,我想获得字符串在文件中的位置,这样我就可以使用
RandomAccessFile
file.seek()直接访问字符串

问题是很多文件i/o操作都是异步的,写操作可能在很短的时间间隔内发生——这意味着异步写,因为其他操作都是低效的。如何确保文件指针计算正确?我是Java的新手,还不了解文件I/O的不同方法的细节,所以请原谅我的问题,如果使用BufferedWriter正是我想要的,那么您如何获得它的当前长度


编辑:不能读取整个文件。文件很大,正如我所说,写入操作经常发生,在峰值时间每秒数百次。

请参阅FileChannel类:

链接中的相关片段:

文件本身包含可变长度的字节序列,可以读取和写入,并且可以查询其当前大小。当写入的字节超过其当前大小时,文件的大小会增加


文件通道可供多个并发线程安全使用。根据通道接口的指定,可以随时调用close方法。在任何给定时间,只有一个涉及通道位置或可以更改其文件大小的操作可能正在进行中;在第一个操作仍在进行时尝试启动第二个此类操作将被阻止,直到第一个操作完成。其他行动,特别是采取明确立场的行动,可以同时进行;他们是否真的这样做取决于底层的实现,因此没有具体说明。

可能的重复:@ccozad,它根本没有解释如何从我看到的情况中获得职位,除非我遗漏了什么。(我以前看过那一页)我的理解是,你需要将数据附加到一个文件中?你还说其他一切都是“低效的”。您是否认为这是因为有人告诉您Java很慢,还是因为您尝试过它,但性能没有满足您的需要?社区可以帮助修复缓慢的代码,但如果您没有尝试过标准的流设施,则很难提供帮助。此外,关于流的另一个问题,符合SeekableByteChannel接口的类有position()和size()。由于@ccozad显然没有简单的解决方案,我为BufferedWriter编写了自己的包装器,它可以跟踪读取的字节。我会张贴的来源作为一个答案,一旦我做了,并有它的测试。