写了一个读文件最后一行的算法,主要思想是利用RandomAccessFile 这个类一开始先将文件的游标移动到文件最后一个字符,然后逐渐向文件头推进,一旦找到'/r'或者‘/n’的时候就将当前的游标记录下来,这个游标的位置就是文件最后一行的起始位置。
?
?这个方法的优点是在处理大文件的时候,效率会高一些。
?
import java.io.RandomAccessFile;
/**
* @author 百岁(baisui@taobao.com)
* @date 2012-2-15
*/
public class RandomAccessFileTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
RandomAccessFile randomAccess = new RandomAccessFile(
"D:\\tmp\\test.txt", "r");
boolean eol = false;
int c = -1;
long fileLength = randomAccess.length();
long size = 1;
ww: while (!eol) {
long offset = fileLength - (size++);
randomAccess.seek(offset);
switch (c = randomAccess.read()) {
case -1:
case '\n':
case '\r':
randomAccess.seek(offset + 1);
break ww;
}
}
String line = null;
while ((line = randomAccess.readLine()) != null) {
System.out.println(line);
}
randomAccess.close();
}
}
?