详细 代码如下 ,请各位老大帮小弟看看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();
}
}
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();
}
}
帮我看看,\n 改成 \r\n 好像不可以
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();
} }
i = dfi.readInt();执行之后也会移动游标啊。应该放在第二个while外面吧,或者使用i = (int) ch;还有就是外层while循环的判断(i!=-1)。当读到zhengyuan\n之后,最后的ch是\n,而i呢?i = dfi.readInt();如果在第二个while里面,就执行不了了。
而如果放在第二个while外面,i = dfi.readInt();就会异常。
i!=-1是干什么用的
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;
}
}
然后判断i是不是-1,然后再(char)i转换过去啊
"EOFException if this input stream reaches the end before reading two bytes"现结合楼主的程序分析一下抛出EOFException异常的原因:
1. int i = dfi.readInt();
2. while (i != -1) {
3. System.out.println("i=" + i);
4. char ch;
5. while ((ch = dfi.readChar()) != '\n') { // 这句话报出异常
6. System.out.println(ch);
7. i = dfi.readInt();
8. }
9. }
第一行readInt()是读取四个字节整数,也就是在save中写入的整数:
dout.writeInt(this.number);
所以有第三行的输出:i=1
第五行的readChar()是读取两个字节,对应save中写入的char型数据:
dout.writeChar('\t');
所以有第六行的输出:'\t'
接着第七行的readInt()又读取四个字节,也就是对应在save中写入的字符串:
dout.writeChars(this.name); // "dawei"
"dawei"的前两个字符'd','a'(一个char占两个字节)
然后再进入第五行循环,readChar()读取两个字节,对应的是"dawei"中的'w'字符,
所以有第六行的输出:'w'
接着第七行的readInt()又读取四个字节,对应的是"dawei"中的'e','i'两个字符(虽然不是整数,但是把这四个字节转换
成整数进行输出,加个打印语句就可以看到结果)
再进入第五行循环,readChar()读取两个字节,刚好是save中写入的'\n'
dout.writeChar('\n');
因此程序跳到第二行循环,测试的i显然不是-1(是前面读取的'e','i'四个字节转换得到的整数,也就是接下来第三行的输出:i=6619241)
接着程序运行到第五行,显然此时输入流已经到达文件尾,当再调用readChar()的时候自然会
抛出java.io.EOFException异常,也就是这句话描述的意思:
"EOFException if this input stream reaches the end before reading two bytes"
writeObject() 方法读取的时候,只会读取 一个 Stu 对象 ,有没有 方法 显示所有的 Stu 对象??????