赞
踩
前面几节已经介绍了整个课设,这一节重点介绍一些在做课设中遇到的一些问题和讨论出来的解决办法。希望大家多多指正!!!
之前一直考虑使用MYSQL数据库进行数据的存储,因为使用数据库对于后面的查询、更新等操作。但是看到了题目要求使用Java读写文件,但是想到的是不能使用数据库(后面和老师了解到才知道,数据库文件也是Java读取文件,当时就懵了哈哈哈,但是那个时候我已经做完了课设就没有事件去改了。)当然使用数据库比读写文本文件方便的太多,很多一行sql就可以搞定了。JDBC也是可以有很多的东西可以学习的,虽然现在有很多的框架比如mybatis这些,但是这些比较基本的还是可以学习一下他们的思路,比如怎么去编写连接池。最后还是选择了读取文本文件,因为自己本身对于文件IO了解的少(至少比数据库连接少,因为之前大一的时候做过JDBC)所以想学习一下文件IO。确实在这个过程过也学到了不少的东西。
在刚开始进行选择功能的时候,我第一次想的是直接将对象按照文本写入文件,这样就和python处理数据一样,每次读一行,然后分割,这样就不是按照对象存储的了。所以又转战考虑了使用二进制IO进行对象存储,使用writeObject方法将对象写入文件,只不过是二进制写入,这样的话,你打开文件的时候是看不见了里面的内容的。但是这里面有一个坑,如果使用一次FileOutputStream fos = new FileOutputStream(file, true); ObjectOutputStream oos = new ObjectOutputStream(fos);方法的话,那么你使用FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis);读出来的对象是可以正常的,但是如果进行多次打开文件进行追加对象的化使用该方法读取就会出现错误,只能读取第一个对象,后面的就会报错java.io.StreamCorruptedException: invalid type code: AC,该原因是在每一次打开文件进行写入对象的时候就在前面加4个字节的头部,所以多次打开的时候就会有多个头部,所以会在读取的时候就会出现错误。我在网上找到的解决办法有一种我使用的是在每次写入对象的时候,先向后4个字节,这样就可以避免多个头部的问题,还有一个办法就是在写入追加对象的时候就不写入头部。网上都有这个的解决办法。
最
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。