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的就能执行,麻烦大家看一下怎么修改程序呢?

解决方案 »

  1.   

    可是为什么在我机器上就有问题了呢?
    String name = in.readUTF();
    就是这一句啦,是不是编码的问题呢?
      

  2.   

    这是个偶然的错误
    当你把in这个文件关闭时 
    String name = in.readUTF();
    这句话它还在等着读数据
    所以就会报这个错误可以这样改
    将in.close()
    这样改
    catch(EOFException e)
    {
         try
           {
              in.close();
           }catch(IOException e)
            {
                e.printStackTrace();
            }
    }
    这样应该就行了
    你去试试
      

  3.   

    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();
    }
    }}是这样子改么?
    可是虽然不报错了,也没输出了呢……
      

  4.   

    我在cmd和Netbeans中试过这两个代码,不知道为什么都没问题??
      

  5.   

    那是你的字符转换有问题?
    我开始也试过一次
    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();
    }
    }}这样改就对了
    你去试试看
      

  6.   

    EOFException 当输入过程中意外到达文件或流的末尾时,抛出此异常。 
      

  7.   

    意外的错误,那个in.close还是在finally里写吧
      

  8.   

    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 难免你文件的内容与你第一次读写的结果不一样 所以会出异常
      

  9.   

    public Member(String name, int age) {
    super();
    this.name = name;
    this.age = age;
    }
    这个没写错吧。
      

  10.   

    String name = in.readUTF();
    这句不会导致不输出,最多只是导致输出的是乱码
      

  11.   

    跟俺11L说的没关系 当俺放X了。。LZ的程序我直接可以运行 没出啥错。。
      

  12.   

    先把构造器改成false吧 看看是啥效果
      

  13.   


    他输入的不是乱码 你现在是用Data 你不能以 查看字符流的方式查看他..
      

  14.   

    justin    momor    bush   
    就是这样的啦,文件里面的……
      

  15.   

    没人回答了?
    哎,我来说一下吧,不是程序的问题,是保存的txt文件的问题。
    不应该保存为UTF-8编码的呢,保存为ANSI编码的就没报错了,也能正常输出。
    貌似字节和字符什么的关系啦……
    数字,字母占的字符数不一样吧,不明白……