一道很简单的IO问题(java.io.EOFException)

mf0606 2010-05-26 09:53:30
Member类

public class Member {

private String name;
private int age;

public Member() {

}

public Member(String name, int age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}



DataStreamDemo类

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataStreamDemo {

public static void main(String[] args) {
Member[] members = {new Member("justin", 21), new Member("momor", 28), new Member("bush", 19)};
try{
DataOutputStream out = new DataOutputStream(new FileOutputStream("E://sourse.txt", true));
for(Member m : members) {
out.writeUTF(m.getName());
out.writeInt(m.getAge());
}
out.flush();
out.close();
DataInputStream in = new DataInputStream(new FileInputStream("E://sourse.txt"));
for(int i=0; i<members.length; i++) {
String name = in.readUTF();
int age = in.readInt();
members[i] = new Member(name, age);
}
in.close();
for(Member m : members) {
System.out.println(m.getName() + " " + m.getAge() );
}
} catch(IOException e) {
e.printStackTrace();
}
}

}


报错:
java.io.EOFException
at java.io.DataInputStream.readFully(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at com.test1.DataStreamDemo.main(DataStreamDemo.java:23)



注:如果把文件类型换成.dat的就能执行,麻烦大家看一下怎么修改程序呢?
...全文
358 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
mf0606 2010-05-27
  • 打赏
  • 举报
回复
justin momor bush
就是这样的啦,文件里面的……
BearKin 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 mf0606 的回复:]
能输入到文件里面,输入的就是乱码。
然后再从文件里读出就不行了……就报错了
[/Quote]

他输入的不是乱码 。。。你现在是用Data 你不能以 查看字符流的方式查看他..
mf0606 2010-05-27
  • 打赏
  • 举报
回复
能输入到文件里面,输入的就是乱码。
然后再从文件里读出就不行了……就报错了
mf0606 2010-05-27
  • 打赏
  • 举报
回复
记事本编码错误了……
BearKin 2010-05-27
  • 打赏
  • 举报
回复
先把构造器改成false吧 看看是啥效果
BearKin 2010-05-27
  • 打赏
  • 举报
回复
跟俺11L说的没关系 当俺放X了。。

LZ的程序我直接可以运行 没出啥错。。
氧气网航 2010-05-27
  • 打赏
  • 举报
回复
String name = in.readUTF();
这句不会导致不输出,最多只是导致输出的是乱码
BearKin 2010-05-27
  • 打赏
  • 举报
回复
不对 原因不是这个 等等等等。。
氧气网航 2010-05-27
  • 打赏
  • 举报
回复
public Member(String name, int age) {
super();
this.name = name;
this.age = age;
}
这个没写错吧。。。。
BearKin 2010-05-27
  • 打赏
  • 举报
回复
package test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataStreamDemo {

public static void main(String[] args) {
Member[] members = { new Member("justin", 21), new Member("momor", 28), new Member("bush", 19) };
try {
DataOutputStream out = new DataOutputStream(new FileOutputStream("E://sourse.txt", false));
for (Member m : members) {
out.writeUTF(m.getName());
out.writeInt(m.getAge());
}
out.flush();
out.close();
DataInputStream in = new DataInputStream(new FileInputStream("E://sourse.txt"));
for (int i = 0; i < members.length; i++) {
String name = in.readUTF();
int age = in.readInt();
members[i] = new Member(name, age);
}
in.close();
for (Member m : members) {
System.out.println(m.getName() + " " + m.getAge());
}
} catch (IOException e) {
e.printStackTrace();
}
}

}

class Member {

private String name;
private int age;

public Member() {

}

public Member(String name, int age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}


把true改成false(append - 如果为 true,则将字节写入文件末尾处,而不是写入文件开始处 ) 你现在是用Data读写 再加上的你append为true 难免你文件的内容与你第一次读写的结果不一样 所以会出异常
coolbamboo2008 2010-05-27
  • 打赏
  • 举报
回复
意外的错误,那个in.close还是在finally里写吧
yueguangkai001 2010-05-27
  • 打赏
  • 举报
回复
EOFException 当输入过程中意外到达文件或流的末尾时,抛出此异常。
无聊司马 2010-05-27
  • 打赏
  • 举报
回复
那是你的字符转换有问题?
我开始也试过一次


import java.io.EOFException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
class Member {

private String name;
private int age;

public Member() {

}

public Member(String name, int age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}







public class DataStreamDemo {
static DataInputStream in = null;
public static void main(String[] args) {
Member[] members = {new Member("justin", 21), new Member("momor", 28), new Member("bush", 19)};
try{
DataOutputStream out = new DataOutputStream(new FileOutputStream("D://sourse.txt", true));
for(Member m : members) {
out.writeUTF(m.getName());
out.writeInt(m.getAge());
}
out.flush();
out.close();
in = new DataInputStream(new FileInputStream("D://sourse.txt"));
for(int i=0; i<members.length; i++) {
String name = in.readUTF();
int age = in.readInt();
members[i] = new Member(name, age);
}

for(Member m : members) {
System.out.println(m.getName() + " " + m.getAge() );
}
}
catch(EOFException e1 )
{
try
{
in.close();
}catch(IOException e2)
{
e2.printStackTrace();
}
}
catch(IOException e) {
e.printStackTrace();
}
}

}

这样改就对了
你去试试看
mf0606 2010-05-27
  • 打赏
  • 举报
回复
那我就不懂了,对这个问题很是纠结……
BearKin 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 mf0606 的回复:]
没人回答了?
哎,我来说一下吧,不是程序的问题,是保存的txt文件的问题。
不应该保存为UTF-8编码的呢,保存为ANSI编码的就没报错了,也能正常输出。
貌似字节和字符什么的关系啦……
数字,字母占的字符数不一样吧,不明白……
[/Quote]

跟这个没关系的 你出了那个错误可能是因为你更改了文件内容并且又对那个文件进行了操作
mf0606 2010-05-27
  • 打赏
  • 举报
回复
没人回答了?
哎,我来说一下吧,不是程序的问题,是保存的txt文件的问题。
不应该保存为UTF-8编码的呢,保存为ANSI编码的就没报错了,也能正常输出。
貌似字节和字符什么的关系啦……
数字,字母占的字符数不一样吧,不明白……
mf0606 2010-05-26
  • 打赏
  • 举报
回复
能写进去,就是没输出,控制台上没输出……
wd9053 2010-05-26
  • 打赏
  • 举报
回复
我在cmd和Netbeans中试过这两个代码,不知道为什么都没问题??
cwjieNo1 2010-05-26
  • 打赏
  • 举报
回复
没有输出是不是没有写进去?
mf0606 2010-05-26
  • 打赏
  • 举报
回复
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataStreamDemo {

public static void main(String[] args) {
Member[] members = {new Member("justin", 21), new Member("momor", 28), new Member("bush", 19)};
DataInputStream in = null;
try{
DataOutputStream out = new DataOutputStream(new FileOutputStream("E://sourse.txt", true));
for(Member m : members) {
out.writeUTF(m.getName());
out.writeInt(m.getAge());
}
out.flush();
out.close();
in = new DataInputStream(new FileInputStream("E://sourse.txt"));
for(int i=0; i<members.length; i++) {
String name = in.readUTF();
int age = in.readInt();
members[i] = new Member(name, age);
}
for(Member m : members) {
System.out.println(m.getName() + " " + m.getAge() );
}
} catch(EOFException e) {
try{
in.close();
} catch(IOException eo) {
e.printStackTrace();
}
}
catch(IOException e) {
e.printStackTrace();
}
}

}

是这样子改么?
可是虽然不报错了,也没输出了呢……
加载更多回复(3)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧