我试图通过RandomAccessFile的寻求,并作为算法的一部分我要读的线,然后从行

的端部向后寻求

E.g

String line = raf.readLine();
raf.seek (raf.getFilePointer() - line.length() + m.start() + m.group().length());

//m is a Matcher for regular expressions

我已经下车接一个错误的负荷,无法找出原因。我刚刚发现这是因为一些文件,我从阅读具有UNIX风格的换行符,\ r \ n和一些刚刚Windows风格的\ n

有一个简单的有RandomAccessFile的对待所有的换行作为Windows风格的换行符?

有帮助吗?

解决方案

您总是可以回到流了两个字节,重新阅读,看它是否是\ r \ n或(\ r!)\ N:

String line = raf.readLine();
raf.seek(raf.getFilePointer()-2);
int offset = raf.read() == '\r' ? 2 : 1;
raf.read(); //discard the second character since you know it is either \n or EOF by definition of readLine
raf.seek (raf.getFilePointer() - (line.length()+offset) + m.start() + m.group().length());

我不知道究竟在何处您试图将文件指针指向,所以适当调整2/1常量。您可能还需要在发生,他们添加一个额外的支票空行(\ n \ n)的在你的文件,如它显示了你可能会在一个无限循环卡住不代码一步过去吧。

其他提示

没有。 RandomAccessFile的和相关的抽象(包括底层文件系统)模型文件作为字节序列的可转位。他们不知道,或约线路或线路终端服务。

您需要做的就是记录行开始的实际位置,而不是试图在那里他们是基于对行终止序列是什么假设要弄清楚。另外,使用的线读出器,其捕获线终止序列对于每个它读取,无论是作为该行的一部分或在可以读取每个输入行之后访问的属性线。

另外,将所有的文件,你可以打开它们,随机访问之前使用DOS行终止序列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top