一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java實現倒序讀取文件功能示例分享

java實現倒序讀取文件功能示例分享

2019-11-20 15:06Java教程網 JAVA教程

這篇文章主要介紹了java實現倒序讀取文件功能示例,需要的朋友可以參考下

Long end,long num,File file,String charset
4個參數說明
end 相當于坐標 ,tail 向上的起點,num是讀取的行數,file 目標文件 charset字符集 默認UTF8
end 為 null 代表從 文件 最末端 向上 獲取。

Map m=FileUtil.tail(null,10,file,null)//讀取文件最后10行,結果在 m.get(FileUtil.ARR) 里
FileUtil.tail(m.get(FileUtil.POINT),3,file,null)//讀取文件倒數 11行到13行,其實就是接著上邊的第10行再向上讀3行

 

復制代碼代碼如下:


public class FileUtil {

 

    private static final long step=5000;

    public static final String ARR="arr";
    public static final String POINT="point";

    public static Map tail(Long end,long num,File file,String charset)throws Exception{
        if(num<=0||(end!=null&&end<0)){
            throw new IllegalArgumentException();
        }
        Map map=new HashMap();
        RandomAccessFile acc=null;
        try {
            acc = new RandomAccessFile(file, "r");
            long temp_end = (end == null ? acc.length() : end);
            long my_point = temp_end > step ? (temp_end-step) : 0;
            acc.seek(my_point);
            LinkedList<Object[]> queue = new LinkedList<Object[]>();
            String temp;
            int n=0;
            while((temp=acc.readLine())!=null){
                if(++n==1&&my_point!=0){
                    continue;
                }
                Object[]  objects=new Object[2];
                long point = acc.getFilePointer();
                if(point>=temp_end&&end!=null){break;}
                objects[0]=point;
                objects[1]=new String(temp.getBytes("8859_1"),charset);
                if(queue.size()==num){
                    queue.poll();
                }
                queue.offer(objects);
            }

            if(queue.size()<num&&my_point>0){
                long last_num=num-queue.size();
                Object[] header = queue.peek();
                if(header==null){throw new RuntimeException("FileUtil step:"+step+" not enough long");}
                Map m = tail((Long)header[0], last_num, file,charset);
                map.put(POINT,m.get(POINT));
                map.put(ARR,ArrayUtils.addAll((Object[])m.get(ARR),queue.toArray()));
            }else if(queue.size()>0){//獲取的行數不夠,并且沒有到達TOP
                map.put(POINT,queue.peek()[0]);
                map.put(ARR,queue.toArray());
            }
        }finally {
            if(acc!=null){
                try {
                    acc.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return map;
    }


}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品视频免费一区二区三区 | 日本中出视频 | avove本人照片 | 邪恶肉肉全彩色无遮琉璃神社 | 西施打开双腿下面好紧 | 欧美福利在线观看 | 好湿好紧太硬了我太爽了网站 | 久久九九久精品国产尤物 | 成年人在线免费看 | 亚洲性色永久网址 | 三级午夜宅宅伦不卡在线 | 国产一区二区视频在线播放 | 天海翼黄色三级 | 欧美日韩一区二区三区久久 | 国产第一福利 | 国产午夜精品一区二区三区不卡 | 国产精品毛片高清在线完整版 | 欧美男男xxx激情做受 | 好大好猛好深好爽视频 | china精品对白普通话 | 日韩精品免费一区二区 | 蜜柚精彩在线观看 | 午夜小视频网站 | 久久黄色大片 | 精品操| 欧美在线成人免费国产 | 日韩大片在线播放 | 国产1广场舞丰满老女偷 | 日本手机在线 | 成人精品第一区二区三区 | sihu国产午夜精品一区二区三区 | 国产精品露脸国语对白河北 | 男人狂躁女人下面狂叫图片 | 俺去俺来也www色官网免费的 | 亚洲精品乱码久久久久久蜜桃欧美 | 人生路不在线观看完整版 | 国产精品猎奇系列在线观看 | 茄子视频懂你更多apl | 脱女学小内内摸出水网站免费 | www.色.con| 欧美日韩一区二区三区在线视频 |