高效读取文件最后一行

来源:互联网 发布:定宽买高窗帘算法 编辑:程序博客网 时间:2024/05/22 08:51
package xfd.da.test;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;public class QuickRead{public static void main(String[] args) throws Exception {//读取最后一行  File file = new File("D:/Tomcat 6.0/webapps/archive4/jsp/json1.txt"); // 100M     long start = System.currentTimeMillis();  String lastLine = readLastLine(file, "utf-8");  long delt = System.currentTimeMillis() - start;  System.out.println(lastLine);  System.out.println("读取时间(毫秒):" + delt);  String json = lastLine.substring(1);    file = new File("D:/Tomcat 6.0/webapps/archive4/jsp/json1.txt");// 仅一行文字  start = System.currentTimeMillis();  lastLine = readLastLine(file, "utf-8");  delt = System.currentTimeMillis() - start;  System.out.println(lastLine);  System.out.println("读取时间(毫秒):" + delt);}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;}}

 
原创粉丝点击