JavaI/O中使用readUTF()报java.io.EOFException暂时解决方案
来源:互联网 发布:天锐绿盾软件怎么用 编辑:程序博客网 时间:2024/05/21 17:49
问题描述
练习JavaI/O时自己试着写demo,当使用RandomAccessFile的readUTF()方法时报java.io.EOFException。源码如下:
DirList.java
package com.star.io;import java.io.IOException;import java.io.RandomAccessFile;public class DirList { static String file= "G://a.txt"; static void testRAF() throws IOException { RandomAccessFile rf=new RandomAccessFile(file,"r"); System.out.println(rf.readLine()); System.out.println(rf.readLine()); System.out.println(rf.readUTF()); rf.close(); } public static void main(String[] args) throws IOException { testRAF(); }}
a.txt文件内容如下:
Hello World!1.5862你好啊!
运行程序,输出结果如下:
Exception in thread "main" Hello World!1.5862java.io.EOFException at java.io.RandomAccessFile.readFully(RandomAccessFile.java:438) at java.io.DataInputStream.readUTF(DataInputStream.java:609) at java.io.RandomAccessFile.readUTF(RandomAccessFile.java:965) at com.star.io.DirList.testRAF(DirList.java:12) at com.star.io.DirList.main(DirList.java:17)
思考过程
查看输出结果,并且与输出语句一一对应,发现英文没有问题,只有在遇到中文的时候报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()方法读取中文:
new String(rf.readUTF().getBytes("ISO-8859-1"),"utf-8")
首先使用String的getBytes(Charset)方法获得读取行的ISO-8859-1编码的字节数组,在通过String的构造器String(byte[],Charset)将该数组重新编码成UTF-8的字符串。
新的方法
static void testRAF() throws IOException { RandomAccessFile rf=new RandomAccessFile(file,"r"); System.out.println(rf.readLine()); System.out.println(rf.readLine()); System.out.println(new String(rf.readLine().getBytes("ISO-8859-1"),"utf-8")); rf.close(); }
输出结果
Hello World!1.5862你好啊!
阅读全文
0 0
- JavaI/O中使用readUTF()报java.io.EOFException暂时解决方案
- java.io.EOFException的解决方案
- Java Scoket之java.io.EOFException解决方案
- Java Scoket之java.io.EOFException解决方案
- Java Scoket之java.io.EOFException解决方案
- tomcat启动报错:java.io.EOFException
- Tomcat启动报java.io.EOFException错误
- tomcat启动报java.io.EOFException错误
- TOMCAT启动报IOException while loading persisted sessions: java.io.EOFException解决方案
- Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法
- tomcat启动报错:IOException while loading persisted sessions: java.io.EOFException java.io.EOFException
- IOException while loading persisted sessions: java.io.EOFException java.io.EOFException的解决方案
- javaI/O
- TomCat启动后报:java.io.EOFException错误
- tomcat启动后报:java.io.EOFException错误
- TOmcat启动后报:java.io.EOFException错误
- Tomcat启动时,报java.io.EOFException异常
- 关于tomcat启动报错:java.io.EOFException
- HGDB(pg)建表时指定默认值
- Java基础集合类(一):ArrayList详解
- javascript基本包装类型介绍
- 最优二叉搜索树-------动态规划
- Git自学笔记
- JavaI/O中使用readUTF()报java.io.EOFException暂时解决方案
- Android开发艺术View基础
- Codeforces 869C The Intriguing Obsession【组合数】
- NOIP 2008提高组第三题
- JavaScript内存管理机制以及四种常见的内存泄漏解析
- 欢迎使用CSDN-markdown编辑器
- PG(HGDB)里创建表时不校验列名关键字
- 基于STM32原子战舰板内存管理源码详解
- string+STL——Password