← 回到文章列表

使用Java快速读取文本最后一行内容

现在写的东西经常都会挂上日志输出 但是日志文本的话是至上而下打印的 那么一个文本非常巨大的话 一般的文件读取方式就会很花费时间 所以我们就需要一个能快速的读取 文本最后一行的方法 基本思路如下: 1.使用RandomAccessFile移至文本末端 2.一点一点的往…

现在写的东西经常都会挂上日志输出
但是日志文本的话是至上而下打印的
那么一个文本非常巨大的话
一般的文件读取方式就会很花费时间
所以我们就需要一个能快速的读取
文本最后一行的方法

基本思路如下:
1.使用RandomAccessFile移至文本末端
2.一点一点的往上移动光标
3.碰到回车"\n" 截取最后一句文本

以下是代码:

package name.yumao.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class LastLineReadUtils {
	public static String readLastLine(File file, String charset) throws IOException {
	  if (!file.exists() || file.isDirectory() || !file.canRead()) {
	    return null;
	  }
	  RandomAccessFile raf = null;
	  try {
	    raf = new RandomAccessFile(file, "r");
	    long len = raf.length();
	    if (len == 0L) {
	      return "";
	    } else {
	      long pos = len - 1;
	      while (pos > 0) {
	        pos--;
	        raf.seek(pos);
	        if (raf.readByte() == '\n') {
	          break;
	        }
	      }
	      if (pos == 0) {
	        raf.seek(0);
	      }
	      byte[] bytes = new byte[(int) (len - pos)];
	      raf.read(bytes);
	      if (charset == null) {
	        return new String(bytes);
	      } else {
	        return new String(bytes, charset);
	      }
	    }
	  } catch (FileNotFoundException e) {
	  } finally {
	    if (raf != null) {
	      try {
	        raf.close();
	      } catch (Exception e2) {
	      }
	    }
	  }
	  return null;
	}
}

在这里找找

输入关键词,找一篇过去的记录。