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的就能执行,麻烦大家看一下怎么修改程序呢?
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的就能执行,麻烦大家看一下怎么修改程序呢?
String name = in.readUTF();
就是这一句啦,是不是编码的问题呢?
当你把in这个文件关闭时
String name = in.readUTF();
这句话它还在等着读数据
所以就会报这个错误可以这样改
将in.close()
这样改
catch(EOFException e)
{
try
{
in.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
这样应该就行了
你去试试
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();
}
}}是这样子改么?
可是虽然不报错了,也没输出了呢……
我开始也试过一次
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();
}
}}这样改就对了
你去试试看
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 难免你文件的内容与你第一次读写的结果不一样 所以会出异常
super();
this.name = name;
this.age = age;
}
这个没写错吧。
这句不会导致不输出,最多只是导致输出的是乱码
他输入的不是乱码 你现在是用Data 你不能以 查看字符流的方式查看他..
就是这样的啦,文件里面的……
哎,我来说一下吧,不是程序的问题,是保存的txt文件的问题。
不应该保存为UTF-8编码的呢,保存为ANSI编码的就没报错了,也能正常输出。
貌似字节和字符什么的关系啦……
数字,字母占的字符数不一样吧,不明白……