欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Long end,long num,File file,String charset
4個(gè)參數(shù)說(shuō)明
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ù)不夠,并且沒(méi)有到達(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)文章

  • Java生成PDF文件的實(shí)例代碼

    Java生成PDF文件的實(shí)例代碼

    Java生成PDF文件的實(shí)例代碼,需要的朋友可以參考一下
    2013-05-05
  • Servlet Filter過(guò)濾器執(zhí)行順序

    Servlet Filter過(guò)濾器執(zhí)行順序

    這篇文章主要介紹了Servlet Filter過(guò)濾器執(zhí)行順序的相關(guān)資料,幫助大家更好的理解為什么要用過(guò)濾器,感興趣的朋友可以了解下
    2020-12-12
  • Java 線程池全面總結(jié)與詳解

    Java 線程池全面總結(jié)與詳解

    在一個(gè)應(yīng)用程序中,我們需要多次使用線程,也就意味著,我們需要多次創(chuàng)建并銷毀線程。而創(chuàng)建并銷毀線程的過(guò)程勢(shì)必會(huì)消耗內(nèi)存。而在Java中,內(nèi)存資源是及其寶貴的,所以,我們就提出了線程池的概念
    2021-10-10
  • Java將時(shí)間按月份分段的實(shí)現(xiàn)思路與方法

    Java將時(shí)間按月份分段的實(shí)現(xiàn)思路與方法

    這篇文章主要給大家介紹了關(guān)于Java將時(shí)間按月份分段的實(shí)現(xiàn)思路與方法,通過(guò)文中介紹的方法可以將時(shí)間分成我們想要的時(shí)間段,文中給出了詳細(xì)的實(shí)例代碼,需要的朋友可以參考下
    2021-07-07
  • java構(gòu)造函數(shù)的三種類型總結(jié)

    java構(gòu)造函數(shù)的三種類型總結(jié)

    在本篇文章里小編給大家整理了一篇關(guān)于java構(gòu)造函數(shù)的三種類型總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-01-01
  • Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解

    Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解

    這篇文章主要介紹了Java的NIO之并發(fā)環(huán)境下非阻塞IO技術(shù)詳解,Java NIO(New IO)是Java平臺(tái)提供的一種用于高效處理I/O操作的API,它引入了一組新的類和概念,以提供更好的性能和可擴(kuò)展性,需要的朋友可以參考下
    2023-09-09
  • springMVC自定義注解,用AOP來(lái)實(shí)現(xiàn)日志記錄的方法

    springMVC自定義注解,用AOP來(lái)實(shí)現(xiàn)日志記錄的方法

    下面小編就為大家分享一篇springMVC自定義注解,用AOP來(lái)實(shí)現(xiàn)日志記錄的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Java Base64算法實(shí)際應(yīng)用之郵件發(fā)送實(shí)例分析

    Java Base64算法實(shí)際應(yīng)用之郵件發(fā)送實(shí)例分析

    這篇文章主要介紹了Java Base64算法實(shí)際應(yīng)用之郵件發(fā)送,結(jié)合實(shí)例形式分析了java字符編碼與郵件發(fā)送相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • Spring?Boot統(tǒng)一處理全局異常的實(shí)戰(zhàn)教程

    Spring?Boot統(tǒng)一處理全局異常的實(shí)戰(zhàn)教程

    最近在做項(xiàng)目時(shí)需要對(duì)異常進(jìn)行全局統(tǒng)一處理,所以下面這篇文章主要給大家介紹了關(guān)于Spring?Boot統(tǒng)一處理全局異常的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • Java中SimpleDateFormat 格式化日期的使用

    Java中SimpleDateFormat 格式化日期的使用

    本文主要介紹了Java中SimpleDateFormat 格式化日期的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論