首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

请帮帮忙、多谢

2012-10-08 
请各位大哥帮帮忙、谢谢!小弟最近在用java解析txt文件时遇到一些问题,愿各位大哥帮帮忙。txt内容格式如下:工

请各位大哥帮帮忙、谢谢!
小弟最近在用java解析txt文件时遇到一些问题,愿各位大哥帮帮忙。txt内容格式如下:

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

问题是:要解析这个文件,然后把这些内容放到一张表里面。现在想记录第一次读取文件的结束位置,下次读时就从记录的这个位置开始读取。只是这个txt文件不是固定不变的、可能读完这个txt文件后、又换了一个新的(和前边的没有重复内容),还有一个就是读完txt以后、换了一个新的txt、里面还有以前读过的内容。

[解决办法]
描述的好乱。。。
这所谓的txt文件很大么,
为什么还有下次读取。

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

至于可能有重复的记录,只能在插入数据库时捕获 主键冲突 异常,
然后跳过了。。。
[解决办法]
为什么要记录位置?文件还一次性读取不完?标记的方式不太实用,因为你要去重新写那个txt文件。所以你要先考虑为何要记录第一次读取的位置,如果不是必须要记录的话最好换种方式来,你可以考虑每天换一个记录的txt文件,这样就不存在记录上次读的位置了。
[解决办法]
既然文件是变得,你记录上一次读取文件的位置有什么用呢?
我的思路,及供参考:

Java code
/***你懂得。。。*/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对象,查看缓存中是否存在该对象,不存在便添加到缓存中    }} 

热点排行