手机
当前位置:查字典教程网 >编程开发 >Java >java实现倒序读取文件功能示例分享
java实现倒序读取文件功能示例分享
摘要:Longend,longnum,Filefile,Stringcharset4个参数说明end相当于坐标,tail向上的起点,num是读取的...

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;

}

}

【java实现倒序读取文件功能示例分享】相关文章:

java web项目实现文件下载实例代码

java多线程入门知识及示例程序

java 用递归获取一个目录下的所有文件路径的小例子

Java创建文件夹及文件实例代码

java加密解密示例分享

java基于包结构的请求路由实现实例分享

Java读取Excel文件内容的简单实例

java解析xml之sax解析xml示例分享

使用java实现http多线程断点下载文件(一)

Java 图片压缩实现思路及代码

精品推荐
分类导航