本文共 1511 字,大约阅读时间需要 5 分钟。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | public static void main(String[] args) throws Exception { File file = new File( "E:/a.txt" ); // 100M long start = System.currentTimeMillis(); String lastLine = readLastLine(file, "gbk" ); long delt = System.currentTimeMillis() - start; System.out.println(lastLine); System.out.println( "读取时间(毫秒):" + delt); file = new File( "E:/b.txt" ); // 仅一行文字 start = System.currentTimeMillis(); lastLine = readLastLine(file, "gbk" ); 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 ; } |