代码如下:
import java.io.*;
import java.lang.*;
import javax.swing.*;
class RandomFileTest
{
public static void main(String [] args) throws Exception 
{
int a1,a2,a3;
System.out.println("请输入第一个员工的姓名");
BufferedReader a=new BufferedReader(new InputStreamReader(System.in));
String n1=a.readLine(); 
System.out.println("请输入第一个员工的年龄");
DataInputStream aa=new DataInputStream(System.in);
a1=aa.readInt();
System.out.println("请输入第二个员工的姓名");
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
String n2=b.readLine();   //问题所在:为什么不会等用户输入名字,就直接跳到下一行了呢?
System.out.println("请输入第二个员工的年龄");
DataInputStream bb=new DataInputStream(System.in);
a2=bb.readInt();
System.out.println("请输入第三个员工的姓名");
BufferedReader c=new BufferedReader(new InputStreamReader(System.in));
String n3=c.readLine();////问题所在:为什么不会等用户输入名字,就直接跳到下一行了呢? System.out.println("请输入第三个员工的年龄");
DataInputStream cc=new DataInputStream(System.in);
a3=cc.readInt();
a.close();
aa.close();
b.close();
bb.close();
c.close();
cc.close();
Employee e1 = new Employee(n1,a1);
Employee e2 = new Employee(n2,a2);
Employee e3 = new Employee(n3,a3);
RandomAccessFile ra=new RandomAccessFile("c:\\1.txt","rw");
ra.writeChars(e1.name);
ra.writeInt(e1.age);
ra.writeChars(e2.name);
ra.writeInt(e2.age);
ra.writeChars(e3.name);
ra.writeInt(e3.age);
ra.close();
RandomAccessFile raf=new RandomAccessFile("c:\\1.txt","r");
int len=8;
raf.skipBytes(20); //跳过第一个员工的信息,其中姓名8字节,年龄4字节
System.out.println("第二个员工信息:");
String str="";
for(int i=0;i<len;i++)
str=str+raf.readChar();
System.out.println("name:"+str);
System.out.println("age:"+raf.readInt());

System.out.println("第一个员工的信息:");
raf.seek(0); //将文件指针移动到文件开始位置
str="";
for(int i=0;i<len;i++)
str=str+raf.readChar();
System.out.println("name:"+str);
System.out.println("age:"+raf.readInt());

System.out.println("第三个员工的信息:");
raf.skipBytes(20);  //跳过第二个员工信息
str="";
for(int i=0;i<len;i++)
str=str+raf.readChar();
System.out.println("name:"+str.trim());
System.out.println("age:"+raf.readInt());

raf.close();
System.exit(0);
}
}
class Employee
{
String name;
int age;
final static int LEN=8;
public Employee(String name,int age)
{
if(name.length()>LEN)
{
name = name.substring(0,8);
}
else
{
while(name.length()<LEN)
name=name+"\u0000";
}
this.name=name;
this.age=age;
}
}运行如下:请输入第一个员工的姓名
df
请输入第一个员工的年龄
45
请输入第二个员工的姓名
请输入第二个员工的年龄
45
请输入第三个员工的姓名
请输入第三个员工的年龄
===================================
为什么第二、三个员工的名字不等待输入呢?

解决方案 »

  1.   

    有太多的流确实让人头痛,在很多语言中也经常出现混合数据输入时的混乱情况的存在,问题可能出现在DataInputStream这个流在处理时将后续的字符串漏去了,如果能够改成与串相同的流进行处理,然后进行适当的转换也许就没有问题了,这是我的猜想,不一定对的.
      

  2.   

    djkhym(hym):你说的是对的,我调试了一下,都改成了串处理的流,结果对了。
    为什么我原来的 混合数据输入就会把后续的字符串漏去了呢?