高效读取文件最后一行
来源:互联网 发布:定宽买高窗帘算法 编辑:程序博客网 时间: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;}}