java - 读取/写入文件逐行报告位置

标签 java io

我希望逐行读取和写入一些文件。

我的第一个想法是使用 BufferedReaderBufferedWriter 但我的问题是我需要知道我在文件中走了多远。

在阅读时,我想知道我对文件的处理进行了多远,并且希望它是准确的,因此在每次 readLine() 之后,我期望位置更新,由于涉及缓冲区,这使情况变得复杂。

同样适用于写作,我需要在写一行之前和之后准确地获取位置。我猜这并不像我的理解那么困难,因为 BufferedWriter 在每个换行符之后都会刷新,所以考虑到我正在写行,我可以直接写入 channel 。

在我重新发明轮子或使用一些狡猾的反射之前,JDK 中有什么东西可以帮助我吗?

编辑:为了弄清楚事情,我正在寻找字节位置。

最佳答案

根据您的问题,“我处理文件进行了多远”的含义并不完全清楚。这是否意味着行号或字节位置?

如果它意味着行号,那么实际上有两个选择:

A) 手动跟踪行号。不应该那么难。只需为每一行增加一个计数器即可。

B) 使用java.io.LineNumberReader正如@Jesper建议的

如果它意味着字节位置,则将字节位置计数器增加每行长度,并且不要忘记在字节位置中也包含换行符。

写入时,没有 LineNumberWriter,因此您需要手动跟踪计数器。应该不难。

关于java - 读取/写入文件逐行报告位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29227812/

相关文章:

java - RandomAccessFile - 返回空字符串

perl - 在 Perl 中并行读取 2 个文件时的性能

java - Maven 网络应用程序 "javac: -endorseddirs requires an argument"

java - 使用 Java 8 流对集合进行分组和排序

java - 错误值类 : class org. apache.hadoop.io.Text 不是类 org.apache.hadoop.io.IntWritable

java - WebSphere 和 PropertyPlaceholderConfigurer

在 C 中关闭管道、dup2、文件描述符?

java - Android 中的原生 AAC 流媒体

Java Formatter 不允许换行符?

java - 从输入的第一个字母调用字符串输入的输出