java读取.txt文件的最后一行

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 ;  
}
















本文转自wauoen51CTO博客,原文链接:http://blog.51cto.com/7183397/1860508  ,如需转载请自行联系原作者
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值