Java如何实现按指定行读取文件

发布时间:2021-12-05 09:53:25

????最*在开发实战中,遇到了一个这样的技术情景:


????把log4j生成的日志文件定时刷进MySQL数据库,比如三个小时刷一次,那么每次刷数据的时候,如何控制文件读取是从上一次文件读取结束的地方开始继续读取的?并且本次要读取到文件结尾处。在网上各种搜索提问后,找到了一个叫RandomAccessFile?Java类解决了问题。


????先上代码:




static int size=1;//主要是为了控制循环的次数,因为是定时刷,每次刷的文件行数可能不一样
static long chars=0;//chars指的是字符数
/**
* 读取文件内容
* @param fileName
*/
public Map readANDwrite(String fileName) {

//大集合,以sessionid为键,以一次session的所有访问记录list为值进行存储
Map bigMap = new HashMap();

//一次session的访问记录集合
File file = new File(fileName);

//java提供的一个可以分页读取文件的类,此类的实例支持对随机访问文件的读取和写入
RandomAccessFile rf = null;

String tempString = null;
try {

//初始化RandomAccessFile,参数一个为文件路径,一个为权限设置,这点与Linux类似,r为读,w为写
rf = new RandomAccessFile(fileName, "rw");

//设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作
rf.seek(chars);

//获取文件的行数
int fileSize = getTotalLines(file);
for (int i = size-1; i < fileSize; i++) {//从上一次读取结束时的文件行数到本次读取文件时的总行数中间的这个差数就是循环次数

//一行一行读取
tempString = rf.readLine();
//文件中文乱码处理
tempString = tempString.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
tempString = tempString.replaceAll("\+", "%2B");
tempString = java.net.URLDecoder.decode(tempString, "GB2312");

//将字符串JSON转换为实体JSON,以便能通过key取value
JSONObject json = JSONObject.fromObject(tempString);
String refPage = json.get("refPage").toString();
System.out.println(refPage);
Map tmap = new HashMap();

if (bigMap.containsKey(refPage))
tmap = (Map) bigMap.get(refPage);
else {
tmap = new HashMap();
}
// 计数
String tCount = "count";
int pvCount = 1;
if (tmap.containsKey(tCount)) {
pvCount = (Integer) tmap.get(tCount);
}
pvCount++;
tmap.put(tCount, pvCount);
bigMap.put(refPage, tmap);
}
//返回此文件中的当前偏移量。
chars = rf.getFilePointer();
size=fileSize;
} catch (IOException e) {
e.printStackTrace();
}catch(JSONException j){

} finally {
if (rf != null) {
try {
rf.close();
} catch (IOException e1) {
}
}
}
return bigMap;
}

?//获取文件的行数
static int getTotalLines(File file) throws IOException {
FileReader in = new FileReader(file);
LineNumberReader reader = new LineNumberReader(in);
String s = reader.readLine();
int lines = 0;
while (s != null) {
lines++;
s = reader.readLine();
}
reader.close();
in.close();
return lines;
}
????


相关文档

  • 二维图像标注工具(Labelme for deep learning annoation)
  • 小学生作文下五子棋
  • 三星阿尔法 价格表
  • 员工奖罚规章制度范本最新
  • 预防男人早泄有什么好办法
  • DAS、NAS、SAN存储简介
  • 治前列腺有哪些民间偏方
  • 羊肚的营养价值和美味做法
  • 孝在我心中优秀演讲稿***2***
  • 闻一多先生的七子之歌是为啦什么而写的
  • 八年级体育教学工作计划三篇
  • 消防控制室上墙制度
  • RocketMQ DLedger 多副本即主从切换配置
  • 古典书房装修效果图
  • Cmake教程
  • 8大元气食物拯救湿重体质
  • 快乐人生格言警句
  • 一种基于神经网络的对话模型
  • 河中石兽主旨河中石兽主旨归纳
  • 高一下册期中政治复习试题
  • 苏科版八年级下数学期末试卷
  • 手机变工厂模式怎么办大全
  • Vmware虚拟机完整创建一个linux(Ubuntu)系统全过程(一)
  • 实用的四年级第一学期工作计划三篇
  • 高考化学一轮复习很关键
  • 2020年携手防疫抗艾主题宣传活动个人心得体会
  • 开学各项工作自查报告范文
  • 铆钉怎么装
  • 看见英语怎么读
  • 事务所实习总结
  • 猜你喜欢

  • 除夕作文600字初中
  • 新余市城北美华特种养殖场(企业信用报告)- 天眼查
  • 人教版高数必修四第4讲:三角函数的图像与性质(学生版)
  • 成都一品观企业营销策划有限公司企业信用报告-天眼查
  • cf卡协议
  • 网络计划的优化2:费用优化
  • 鼻咽癌患者的个案护理
  • 天使一号的策划书
  • 1.1.1 职位说明书管理办法
  • 【2019最新】中考物理基础过关复*集训第四章光现象练*册新人教版word版
  • 关于夸夸同学的闪光点小学作文
  • Abeka_Economics_Test_TK
  • 加快发展金融IC卡业务的思考——以贵州工行为例
  • time_wait状态产生的原因,危害,如何避免
  • 2019四年级上册英语同步练习Lesson 4 Put up your left hand 接力版精品教育.doc
  • 南京航空航天大学09年硕士研究生入学考试微机原理答案
  • 2019年最新-建筑工程质量验收规范及质量通病防治讲座-精选文档
  • 浅谈护患沟通在临床护理工作中的作用
  • 华硕笔记本开机屏幕不亮怎么办
  • 2018-2019人教新目标高中英语选修六课时巩固提升: Unit 1 Period 1 Word版含答案 (7)
  • 用EasyGBD做国标GB28181协议级联
  • 江苏省姜堰市2019-2020学年七年级下期中考试数学试题-附详细答案
  • 医务人员管理办法
  • (含答案)2013年7月高等教育自学考试马克思主义基本原理概论试题
  • 电脑软件不弹安装向导怎么办
  • G单螺杆泵型号及原理
  • 石家庄旅游景点排行榜
  • 设备科学*记录表
  • [最新整理]领导讲话心得体会(精选多篇).doc
  • 2018年初二物理下册 5.3《滑轮》3 北京课改版
  • 欠发达地区经济开发区可持续发展掏关键问题——基于江苏省宿迁经济开发区的调研
  • 小学五年级修改病句ppt课件
  • map删除元素
  • 云南省2018年保育员三级专业能力考试试题试卷及解析
  • 高三物理人教版复*课件:第3章_1牛顿第一定律__牛顿第三定律
  • 交感神经型颈椎病
  • 【推荐下载】学校领导述职报告5000字_学校领导述职报告5000字范文word版本 (9页)
  • 《心理学》常识学*要点
  • 【精品文档】第十三个生肖(200字)作文-范文模板 (1页)
  • java创建定时器
  • 三维地震监理工程合同书
  • 速录师应具备的条件
  • 电脑版