读取末行操作:
public static String readendline(String filename) throws Exception { RandomAccessFile file0 = new RandomAccessFile(filename, "r"); long start = file0.getFilePointer(); long len = file0.length(); long nextend = start + len - 1; file0.seek(nextend); byte buf[] = new byte[1]; int i = -1; String linestr = null; while (nextend > start) { i = file0.read(buf, 0, 1); if (buf[0] == '\n') { if ((linestr = file0.readLine()) != null) { System.out.println("endline:" + linestr); break; } } nextend--; file0.seek(nextend); } file0.close(); return linestr; } }
写末行,覆盖末行操作:
public static void writeendline(String filepath, String string) throws Exception { RandomAccessFile file = new RandomAccessFile(filepath, "rw"); long len = file.length(); long start = file.getFilePointer(); long nextend = start + len - 1; byte[] buf = new byte[1]; file.seek(nextend); file.read(buf, 0, 1); if (buf[0] == '\n') file.writeBytes(string); else file.writeBytes("\r\n"+string); file.close(); } public static void rewriteendline(String filepath, String string) throws Exception { RandomAccessFile file = new RandomAccessFile(filepath, "rw"); long len = file.length(); long start = file.getFilePointer(); long nextend = start + len - 1; int i = -1; file.seek(nextend); byte[] buf = new byte[1]; while (nextend > start) { i = file.read(buf, 0, 1); if (buf[0] == '\r') { file.setLength(nextend - start); break; } nextend--; file.seek(nextend); } file.close(); writeendline(filepath, string); }