日期:2014-05-20  浏览次数:20761 次

有关 DataInputStream 和 DataOutputStream 的 问题 ,报出 EOFException 异常
详细 代码如下 ,请各位老大帮小弟看看

package src;

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

public class DataInputStreamTest {


public static void main(String[] args) throws Exception{
String fname = "D:\\Myworkspace\\IOTest\\src\\student.txt";
new Student("dawei").save(fname);
new Student("zhengyuan").save(fname);
Student.display(fname);
}
}
class Student{

static int count = 0;
int number = 1;
String name;
Student(){
this("");
}
Student(String name){
this.count++;
this.number = this.count;
this.name = name;
}
// 保存 数据
public void save(String fname)throws Exception{
File f = new File(fname);
f.createNewFile();
FileOutputStream fo = new FileOutputStream(fname,true);
DataOutputStream dout = new DataOutputStream(fo);
dout.writeInt(this.number);
dout.writeChar('\t');
dout.writeChars(this.name);
dout.writeChar('\n');
dout.close();
}
// 显示数据
public static void display(String fname)throws Exception{
FileInputStream fi = new FileInputStream(fname);
DataInputStream dfi = new DataInputStream(fi);
int i = dfi.readInt();
while(i!=-1){
System.out.println("i="+i);
char ch;
while ((ch = dfi.readChar())!= '\n'){ // 这句话报出异常
System.out.println(ch);
i = dfi.readInt();
}
}
dfi.close();
}

}

------解决方案--------------------
EOF:end of file

应该是你的while的判断条件的问题。

\n可能不行吧。换成\r\n看看
------解决方案--------------------
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 

public class DataInputStreamTest { 


public static void main(String[] args) throws Exception{ 
String fname = "D:\\student.txt"; 
new Student("dawei").save(fname); 
new Student("zhengyuan").save(fname); 
Student.display(fname); 


class Student{ 

static int count = 0; 
int number = 1; 
String name; 
Student(){ 
this(""); 

Student(String name){ 
this.count++; 
this.number = this.count; 
this.name = name; 

// 保存 数据 
public void save(String fname)throws Exception{ 
File f = new File(fname); 
f.createNewFile(); 
FileOutputStream fo = new FileOutputStream(fname,true); 
DataOutputStream dout = new DataOutputStream(fo); 
dout.writeInt(this.number); 
dout.writeChar( '\t'); 
dout.writeUTF(this.name); 
dout.writeChar( '\n'); 
dout.close(); 

// 显示数据 
public static void display(String fname)throws Exception{ 
FileInputStream fi = new FileInputStream(fname); 
DataInputStream dfi = new DataInputStream(fi); 
int i = dfi.readInt(); 
while(i!=-1){ 
System.out.print(dfi.readChar());
System.out.print(dfi.readUTF());
System.out.print(dfi.readChar());
try{
i = dfi.readInt();
}catch(Exception e){
break;
}

dfi.close(); 


}
------解决方案--------------------