代码如下:
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
请输入第三个员工的姓名
请输入第三个员工的年龄
===================================
为什么第二、三个员工的名字不等待输入呢?
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
请输入第三个员工的姓名
请输入第三个员工的年龄
===================================
为什么第二、三个员工的名字不等待输入呢?
为什么我原来的 混合数据输入就会把后续的字符串漏去了呢?