Java输入输出流2.ppt

上传人:laozhun 文档编号:2284496 上传时间:2023-02-09 格式:PPT 页数:16 大小:246KB
返回 下载 相关 举报
Java输入输出流2.ppt_第1页
第1页 / 共16页
Java输入输出流2.ppt_第2页
第2页 / 共16页
Java输入输出流2.ppt_第3页
第3页 / 共16页
Java输入输出流2.ppt_第4页
第4页 / 共16页
Java输入输出流2.ppt_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《Java输入输出流2.ppt》由会员分享,可在线阅读,更多相关《Java输入输出流2.ppt(16页珍藏版)》请在三一办公上搜索。

1、Java输入输出流2,伍淳华北京邮电大学计算机学院,Java,Java输入输出流,例:用不同的方案实现将一个Employee记录数组写入文件,并将其读回内存(JAVA Core P602)1)以文本格式保存相同类型(Employee)的数据;2)以二进制格式保存相同类型的数据;,Java,Java输入输出流,采用分隔格式存储Employee记录的一个数组;-每条记录使用单独的一行存储;-不同的成员变量间由分隔符分开;以”|”作为分隔符;Harry Hacker|355500|1989|10|1 Carl Cracker|75000|1987|12|15 Tony Tester|38000|19

2、90|3|15,Java,Java输入输出流,写入记录-采用PrintWriter类;-成员变量之间用”|”分隔,一个记录占一行;-Employee类中增加一个方法:WriteData;public void writeData(PrintWriter out)throws IOException GregorianCalendar calendar=new GregorianCalendar();calendar.setTime(hireDay);out.println(name+|+salary+|+calendar.get(Calendar.YEAR)+|+(calendar.get(C

3、alendar.MONTH)+1)+|+calendar.get(Calendar.DAY_OF_MONTH);,Java,Java输入输出流,读出记录-需要从一行中将各成员变量分离出来;-java.util.StringTokenizer 提供了很多实用的方法来分隔带分隔符的字符串;eg:StringTokenizer tokenizer=new StringTokenizer(line,”|”);StringTokenizer tokenizer=new StringTokenizer(line,”|,.”);如果不指定分隔符集合,默认的就是”tnrf”;,Java,Java输入输出流,S

4、tringTokenizer(String str,String delim)StringTokeizer(String str)boolean hasMoreTokens()String nextToken()int countTokens()while(tokenizer.hasMoreTokens()String token=tokenizer.nextToken();/process token,Java,Java输入输出流,读出记录-为Employee类增加一个readData方法 public void readData(BufferedReader in)throws IOExc

5、eption String s=in.readLine();StringTokenizer t=new StringTokenizer(s,|);name=t.nextToken();salary=Double.parseDouble(t.nextToken();int y=Integer.parseInt(t.nextToken();int m=Integer.parseInt(t.nextToken();int d=Integer.parseInt(t.nextToken();GregorianCalendar calendar=new GregorianCalendar(y,m-1,d)

6、;hireDay=calendar.getTime();,Java,Java输入输出流,写入一个Employee数组-主类中增加一个写数组的静态方法 static void writeData(Employee employees,PrintWriter out)throws IOException/write number of employees out.println(employees.length);for(Employee e:employees)e.writeData(out);,Java,Java输入输出流,读出一个Employee数组-主类中增加一个读数组的静态方法 stat

7、ic Employee readData(BufferedReader in)throws IOException/retrieve the array size int n=Integer.parseInt(in.readLine();Employee employees=new Employeen;for(int i=0;i n;i+)employeesi=new Employee();employeesi.readData(in);return employees;,Java,Java输入输出流,采用二进制的方式存储Employee数组;-当存储大量Employee对象时,采用文本方式保

8、存每个对象的长度不等,因此很难实现随机存取;-采用二进制存储方式让每条记录具有相同的长度;-可以通过RandomAccessFile实现随机存取;-简单数据类型通过DataOutput接口的相关方法可以实现定长写入文件;-String类型的数据长度不定,需提供方法将字符串以固定长度写入文件;-自定类DataIO实现定长字符串的输入与输出;,Java,Java输入输出流,实现字符串定长写入-方法以参数size指定字符串写入的长度,如果不够,以0补充;public static void writeFixedString(String s,int size,DataOutput out)throw

9、s IOException for(int i=0;i size;i+)char ch=0;if(i s.length()ch=s.charAt(i);out.writeChar(ch);,Java,Java输入输出流,实现定长字符串输入-方法从输入流中读取字符,直到读取了size个字符或者遇到一个0值的字符为止,并跳过输入域中其他的0值;public static String readFixedString(int size,DataInput in)throws IOException StringBuilder b=new StringBuilder(size);int i=0;boo

10、lean more=true;while(more,Java,Java输入输出流,写入定长的记录public void writeData(DataOutput out)throws IOException DataIO.writeFixedString(name,NAME_SIZE,out);out.writeDouble(salary);GregorianCalendar calendar=new GregorianCalendar();calendar.setTime(hireDay);out.writeInt(calendar.get(Calendar.YEAR);out.writeI

11、nt(calendar.get(Calendar.MONTH)+1);out.writeInt(calendar.get(Calendar.DAY_OF_MONTH);,Java,Java输入输出流,读出定长的记录public void readData(DataInput in)throws IOException name=DataIO.readFixedString(NAME_SIZE,in);salary=in.readDouble();int y=in.readInt();int m=in.readInt();int d=in.readInt();GregorianCalendar

12、calendar=new GregorianCalendar(y,m-1,d);hireDay=calendar.getTime();,Java,Java输入输出流,设定每个Employee记录的长度为100字节;-年、月、日三整型:12字节;-salary,double类型:8字节;-name:80字节;随机存取-把文件指针定位到第3条记录 long n=3;int RECORD_SIZE=100;in.seek(n-1)*RECORD_SIZE);-读取一条记录 Employee e=new Employee();e.readData(in);-修改记录并存回相同的位置 in.seek(n

13、-1)*RECORD_SIZE);e.writeData(out);,Java,Java输入输出流,设定每个Employee记录的长度为100字节;-年、月、日三整型:12字节;-salary,double类型:8字节;-name:80字节;随机存取-把文件指针定位到第3条记录 long n=3;int RECORD_SIZE=100;in.seek(n-1)*RECORD_SIZE);-读取一条记录 Employee e=new Employee();e.readData(in);-修改记录并存回相同的位置 in.seek(n-1)*RECORD_SIZE);e.writeData(out);,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号