JavaI/O中使用readUTF()报java.io.EOFException暂时解决方案

练习JavaI/O时自己试着写demo,当使用RandomAccessFile的readUTF()方法时报java.io.EOFException。源码如下:
DirList.java


a.txt文件内容如下:


运行程序,输出结果如下:

查看输出结果,并且与输出语句一一对应,发现英文没有问题,只有在遇到中文的时候报java.io.EOFException。
跟踪错误,发现是在调用DataInput接口的readFully(byte b[], int off, int len)方法处抛出的异常,继续查看readFully()方法,找到了关于该方法报EOFException异常的说明:

这里写图片描述

意思是当输入流还没有读完所有字节时就到达了末尾。理解不了。
转去查阅博客,有的说是因为没有关闭输入流,只要使用外流过后调用close()方法关闭流即可,但是检查我的代码,发现并不符合,我最后是调用了close()方法的。
另一篇博客中写道,readUTF()方法只能读入UTF编码的字符,
新航道英语而中文字符并不一定就是UTF编码,在windows系统中,创建txt文件默认的编码是ANSI编码!结果去查看了a.txt的编码,发现就是UTF-8。也不是这个原因。

暂时找不出出错的原因,以后能力够了再回头解决。

使用readLine()方法而不是readUTF()方法读取中文:

首先使用String的getBytes(Charset)方法获得读取行的ISO-8859-1编码的字节数组,在通过String的构造器String(byte[],Charset)将该数组重新编码成UTF-8的字符串。
新的方法

输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值