出现eofexception的原因,及详细解决方案!

吉云

今天刷手机的时候,偶然看到一个报错 “eofexception”,看着挺眼熟的,仔细一想,这不是我之前捣鼓文件读写的时候碰到的那个鬼东西吗?当时可是折腾我好一阵子!今天我就来跟大伙儿好好聊聊这个事儿。

记得那天,我兴致勃勃地写一段代码,想从一个文件里读点数据出来。我用的是 ObjectInputStream,琢磨着这玩意儿不是专门用来读对象的嘛肯定错不。代码写好,一跑,还真读出东西来!

出现eofexception的原因,及详细解决方案!

可是,怪事儿来。这代码在循环里一直读,读到文件末尾,按理说该停?它倒还继续读!直接给我抛出一个大大的 EOFException,程序也跟着歇菜。

我这暴脾气,还能让一个小小的异常给难住?我开始琢磨,这问题到底出在哪儿?

我先是怀疑,是不是我这文件有问题?是不是数据写错,或者格式不对?我仔仔细细地检查一遍文件,还特意用文本编辑器打开看看,没毛病!数据都在,格式也对,这可咋整?

后来我静下心来,一行一行地看代码,终于发现问题所在!原来,我在循环读取的时候,没有正确地处理文件结束的标志。这就像你吃自助餐,盘子里没菜,你还拿着筷子使劲夹,那不得夹空气嘛

找到问题,解决起来就容易多。我在循环读取的代码外面,加一个 try-catch 的框框。这个框框就像一个安全网,专门用来接住那些抛出来的异常。然后,我在 catch 块里,写一行提示信息,告诉我自己,文件已经读完,别再瞎折腾。

  • 我一开始是这么写的:

ObjectInputStream objectInputStream = null;

ArrayList<Student> students = null;

try {

objectInputStream = new ObjectInputStream(new FileInputStream("*"));

students = (ArrayList<Student>) *();

// ... 其他读取操作 ...

} catch (IOException e) {

// ... 处理其他 IOException ...

} catch (ClassNotFoundException e) {

// ... 处理 ClassNotFoundException ...

} finally {

if (objectInputStream != null) {

  • 然后,我改成这样:

ObjectInputStream objectInputStream = null;

ArrayList<Student> students = null;

try {

objectInputStream = new ObjectInputStream(new FileInputStream("*"));

while (true) {

try {

students = (ArrayList<Student>) *();

// ... 其他读取操作 ...

} catch (EOFException e) {

*("文件已经读取完毕!");

break; // 读到文件末尾,跳出循环

} catch (IOException e) {

// ... 处理其他 IOException ...

} catch (ClassNotFoundException e) {

// ... 处理 ClassNotFoundException ...

} finally {

if (objectInputStream != null) {

这下子,程序跑起来就顺畅多。读到文件末尾,就乖乖地停下来,再也不给我抛异常。看着控制台输出的那行“文件已经读取完毕!”,我心里别提多美!

除用 try-catch,我还尝试其他方法。比如说,在读取文件之前,先用 File 类获取一下文件的大小,看看里面到底有多少数据,做到心中有数。不过这个方法对我的问题不大好使唤,文件大小是获取到,但是还是报eofexception,该抛异常还是抛。所以我还是老老实实用try-catch

总结一下

遇到 EOFException,大伙儿也别慌。先看看是不是文件本身有问题,再看看是不是读取的方式不对,记得用 try-catch 给代码加个安全网。这么一套组合拳下来,基本上就能搞定这个小麻烦。希望大家以后写代码的时候,都能顺顺利利的,少遇bug多开心!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]