请各位大哥帮帮忙、谢谢!

dj_zq 2012-09-06 10:11:14
小弟最近在用java解析txt文件时遇到一些问题,愿各位大哥帮帮忙。txt内容格式如下:

工号 姓名 上班日期 上班时间
20 20 2012-05-04 08:30:02
.. .. .......... .........

问题是:要解析这个文件,然后把这些内容放到一张表里面。现在想记录第一次读取文件的结束位置,下次读时就从记录的这个位置开始读取。只是这个txt文件不是固定不变的、可能读完这个txt文件后、又换了一个新的(和前边的没有重复内容),还有一个就是读完txt以后、换了一个新的txt、里面还有以前读过的内容。
...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iGoodLoser 2012-09-06
  • 打赏
  • 举报
回复
楼主的需求的确挺诡异的,楼上的思路只是为了迎合楼主的需求,但不一定是好的解决方案
iGoodLoser 2012-09-06
  • 打赏
  • 举报
回复
既然文件是变得,你记录上一次读取文件的位置有什么用呢?
我的思路,及供参考:

/**
*你懂得。。。
*/
class Employee{
private int empNo;
private String empName;
private Date onDate;
private Time onTime;
//setter
//getter
//hashcode
//equals
}
/**
*这里就不考虑扩展了,特定功能
*/
public class TextHanlder{
private static Map<String, Employee> empCache = new HashMap<String, Employee>();//缓存读取的行数据
private static Map<String, File> fileCache = new HashMap<String, File>();//不知道你文件变化时文件名是否相同,这里权当文件变化时文件名不同
private static Map<String, Integer> posCache = ...;//每个文件结束位置
public static void handle(String fileName){
File f = null;
if((f = sameFile(fileName)) != null){//同一个文件
int pos = posCaceh.get(fileName);

RandomeAccessFile r = new ....
r.seek(pos);
Employee e = new ...
e.setId(r.readInt);
e.setName(r.readUTF());...
empCache.put(e.empName, e);//添加到缓存中
}else{//新的文件
checkFileContent(f);//检查文件内容,将新的内容添加到缓存中
}
最后将缓存中的内容写入到数据库中
}
/**判断是不是同一个文件**/
public static File sameFile(String fileName){
return fileCache.get(fileName);
}
public static void checkFileContent(File file){
//读取文件构造Employee对象,查看缓存中是否存在该对象,不存在便添加到缓存中
}
}

以上只是个大体思路,有些细节或思路等可能有误,还需楼主自己好好斟酌,直接在编辑框里编辑的,错误应该不少
安特矮油 2012-09-06
  • 打赏
  • 举报
回复
为什么要记录位置?文件还一次性读取不完?标记的方式不太实用,因为你要去重新写那个txt文件。所以你要先考虑为何要记录第一次读取的位置,如果不是必须要记录的话最好换种方式来,你可以考虑每天换一个记录的txt文件,这样就不存在记录上次读的位置了。
菖蒲老先生 2012-09-06
  • 打赏
  • 举报
回复
描述的好乱。。。
这所谓的txt文件很大么,
为什么还有下次读取。

你可以在txt文件每一行的最开始设置一个标志位,
比如只要读过的记录加上 “已读取”,
下次只要碰到 已读取 的记录就跳过好了。

至于可能有重复的记录,只能在插入数据库时捕获 主键冲突 异常,
然后跳过了。。。
dj_zq 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
为什么要记录位置?文件还一次性读取不完?标记的方式不太实用,因为你要去重新写那个txt文件。所以你要先考虑为何要记录第一次读取的位置,如果不是必须要记录的话最好换种方式来,你可以考虑每天换一个记录的txt文件,这样就不存在记录上次读的位置了。
[/Quote]

这个做的是我们公司人员的打卡考勤情况,用U盘从打卡机考出这些打卡数据吗。不一定是一个月考一次、比方说第一次考前十五天的、第二次考后十五天的。第二次考的时候肯定会有前十五天的记录。所以我想做个标记。
dj_zq 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
楼主的需求的确挺诡异的,楼上的思路只是为了迎合楼主的需求,但不一定是好的解决方案
[/Quote]

不是我的需求诡异、而是我老板要求的诡异哎。还要谢谢你、我在斟酌一番。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧