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的字符串。
新的方法

输出结果

猜你喜欢

转载自blog.csdn.net/jiangziya1491/article/details/82980333