最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)倒序讀取文件功能示例分享

 更新時間:2014年04月17日 09:56:36   作者:  
這篇文章主要介紹了java實(shí)現(xiàn)倒序讀取文件功能示例,需要的朋友可以參考下

Long end,long num,File file,String charset
4個參數(shù)說明
end 相當(dāng)于坐標(biāo) ,tail 向上的起點(diǎn),num是讀取的行數(shù),file 目標(biāo)文件 charset字符集 默認(rèn)UTF8
end 為 null 代表從 文件 最末端 向上 獲取。

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

復(fù)制代碼 代碼如下:

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){//獲取的行數(shù)不夠,并且沒有到達(dá)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;
    }


}

相關(guān)文章

  • Mybatis的mapper標(biāo)簽 namespace屬性用法說明

    Mybatis的mapper標(biāo)簽 namespace屬性用法說明

    這篇文章主要介紹了Mybatis的mapper標(biāo)簽 namespace屬性用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java?CyclicBarrier錯誤使用的實(shí)例

    Java?CyclicBarrier錯誤使用的實(shí)例

    文章描述了一個Java程序使用CyclicBarrier實(shí)現(xiàn)兩個線程交替打印字母和數(shù)字時遇到的問題,由于線程執(zhí)行順序不當(dāng),導(dǎo)致輸出結(jié)果與預(yù)期不符,通過調(diào)整線程的等待和打印順序,解決了問題,文章還提供了一個控制流圖來詳細(xì)解釋修改前后的程序邏輯
    2025-01-01
  • 詳解SpringBoot之集成Spring AOP

    詳解SpringBoot之集成Spring AOP

    本篇文章主要介紹了詳解SpringBoot之集成Spring AOP,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • SpringBoot訪問接口自動跳轉(zhuǎn)login頁面的問題及解決

    SpringBoot訪問接口自動跳轉(zhuǎn)login頁面的問題及解決

    這篇文章主要介紹了SpringBoot訪問接口自動跳轉(zhuǎn)login頁面的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • springboot簡單接入websocket的操作方法

    springboot簡單接入websocket的操作方法

    這篇文章主要介紹了springboot簡單接入websocket的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 關(guān)于Java垃圾回收開銷降低的幾條建議

    關(guān)于Java垃圾回收開銷降低的幾條建議

    垃圾回收(Garbage Collection)是Java虛擬機(jī)(JVM)垃圾回收器提供的一種用于在空閑時間不定時回收無任何對象引用的對象占據(jù)的內(nèi)存空間的一種機(jī)制,下面這篇文章主要介紹了關(guān)于Java垃圾回收開銷降低的幾條建議,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 圖解Spring容器中實(shí)例化bean的四種方式

    圖解Spring容器中實(shí)例化bean的四種方式

    這篇文章主要介紹了圖解Spring容器中實(shí)例化bean的四種方式,傳統(tǒng)應(yīng)用程序可以通過new和反射方式進(jìn)行實(shí)例化Bean,而Spring IOC容器則需要根據(jù) Bean 定義里的配置元數(shù)據(jù),使用反射機(jī)制來創(chuàng)建Bean,需要的朋友可以參考下
    2023-11-11
  • SpringBoot整合canal實(shí)現(xiàn)數(shù)據(jù)緩存一致性解決方案

    SpringBoot整合canal實(shí)現(xiàn)數(shù)據(jù)緩存一致性解決方案

    canal主要用途是基于?MySQL?數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱和消費(fèi),canal是借助于MySQL主從復(fù)制原理實(shí)現(xiàn),本文將給大家介紹SpringBoot整合canal實(shí)現(xiàn)數(shù)據(jù)緩存一致性解決方案,需要的朋友可以參考下
    2024-03-03
  • 最新評論

    大洼县| 塔城市| 弥勒县| 大连市| 武功县| 沈丘县| 合水县| 南陵县| 广安市| 库车县| 密云县| 湘阴县| 利川市| 威远县| 弥勒县| 浠水县| 江门市| 黄石市| 嘉禾县| 平昌县| 澄迈县| 祁阳县| 柳河县| 彰武县| 卢龙县| 柘荣县| 陈巴尔虎旗| 长汀县| 长泰县| 通化县| 吴川市| 贡山| 华坪县| 得荣县| 罗城| 富平县| 南开区| 石狮市| 耿马| 金乡县| 苏州市|