请各位大哥帮帮忙、谢谢!
小弟最近在用java解析txt文件时遇到一些问题,愿各位大哥帮帮忙。txt内容格式如下:
工号 姓名 上班日期 上班时间
20 20 2012-05-04 08:30:02
.. .. .......... .........
问题是:要解析这个文件,然后把这些内容放到一张表里面。现在想记录第一次读取文件的结束位置,下次读时就从记录的这个位置开始读取。只是这个txt文件不是固定不变的、可能读完这个txt文件后、又换了一个新的(和前边的没有重复内容),还有一个就是读完txt以后、换了一个新的txt、里面还有以前读过的内容。
[解决办法]
描述的好乱。。。
这所谓的txt文件很大么,
为什么还有下次读取。
你可以在txt文件每一行的最开始设置一个标志位,
比如只要读过的记录加上 “已读取”,
下次只要碰到 已读取 的记录就跳过好了。
至于可能有重复的记录,只能在插入数据库时捕获 主键冲突 异常,
然后跳过了。。。
[解决办法]
为什么要记录位置?文件还一次性读取不完?标记的方式不太实用,因为你要去重新写那个txt文件。所以你要先考虑为何要记录第一次读取的位置,如果不是必须要记录的话最好换种方式来,你可以考虑每天换一个记录的txt文件,这样就不存在记录上次读的位置了。
[解决办法]
既然文件是变得,你记录上一次读取文件的位置有什么用呢?
我的思路,及供参考:
/***你懂得。。。*/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对象,查看缓存中是否存在该对象,不存在便添加到缓存中 }}