您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 畜牧/养殖 > 第九章输入输出流和文件操作
1第9章输入/输出流和文件操作文件和流的概念字节输入/输出流类字符输入/输出流类文件操作随机存取文件类2流概念Java使用流的机制实现输入输出操作。流是通过一定的传播途径从源传递到目的地的字节序列,是一个数据序列。3流的类型按向程序传输数据方式分输入流:通过打开一个到数据源(文件、内存或网络端口上的数据)的输入流,程序可以从数据源上顺序读取数据。输出流:通过打开一个到目标的输出流,程序可以向外部目标顺序写数据。按数据格式分字符流类(CharacterStream):用于向字符流读写16位二进制字符,只处理文本数据。字节流类(ByteStream):用于向字节流读写8位二进制的字节,主要用于读写诸如图象或声音等二进制数据。4过滤器过滤器是一种流的类型,修改了现有流的处理方式。使用过滤器操作流步骤:创建一个与数据源或数据目的地端相关联的流。将一个过滤器与该流相关联。从过滤器中读取或写入数据而不是从原始流中读取或写入数据。5Java的输入/输出流与文件操作概述流类InputStream抽象字节输入流类OuputStream抽象字节输出流类Reader抽象字符输入流类Writer抽象字符输出流类文件操作类File文件类RandomAccessFile随机存取文件类6读数据的逻辑为:openastreamwhilemoreinformationreadinformationclosethestream写数据的逻辑为:openastreamwhilemoreinformationwriteinformationclosethestream读写数据逻辑7Java用于输入输出流的类java.io中的基本流类:说明:它们是抽象类,不能直接创建对象。8InputStream类InputStream类中定义了一系列所有字节输入流都需要的方法,来完成从输入流读取数据的操作,该类的所有方法在出错时都会抛出IOException异常基本方法:intread()intread(byte[]buffer)intread(byte[]buffer,intoffset,intlength)其他方法:voidclose()intavailable()longskip(longn)9InputStreamClass的继承关系10OutputStream类OutputStream类中包含一系列所有字节输出流都要使用的方法。基本方法:voidwrite(intc)voidwrite(byte[]buffer)voidwrite(byte[]buffer,intoffset,intlength)其他方法:voidclose()voidflush()11OutputStreamClass的继承关系12Java标准输入/输出标准输入/输出常量publicfinalclassSystemextendsObject{publicfinalstaticInputStreamin//标准输入常量publicfinalstaticPrintStreamout//标准输出常量publicfinalstaticPrintStreamerr//标准错误输出常量}13PrintStream类publicclassPrintStreamextendsFilterOutputStream{publicvoidprint(booleanb)publicvoidprint(charc)publicvoidprint(longl)publicvoidprint(inti)publicvoidprint(floatf)publicvoidprint(doubled)publicvoidprint(Strings)publicvoidprint(Objectobj)publicvoidprintln()}14例:标准输入/输出。KeyboardInput.java15文件输入输出流FileInputStream和FileOutputStream处理文件输入输出操作。构造方法参数:字符串代表的文件或File类型的对象。用read()和write()方法读写文件。例:使用字节流读写文件,ByteFile.java16数据字节流publicclassDataInputStreamextendsFilterInputStreamimplementsDataInput{publicDataInputStream(InputStreamin)//构造方法publicfinalshortreadShort()throwsIOExceptionpublicfinalbytereadByte()throwsIOExceptionpublicfinalintreadInt()throwsIOException//读取整型publicfinallongreadLong()throwsIOExceptionpublicfinalfloatreadFloat()throwsIOExceptionpublicfinaldoublereadDouble()throwsIOExceptionpublicfinalcharreadChar()throwsIOException//读取字符publicfinalbooleanreadBoolean()throwsIOException}17DataOutputStream类publicclassDataOutputStreamextendsFilterOutputStreamimplementsDataOutput{publicDataOutputStream(OutputStreamout)//构造方法publicfinalvoidwriteByte(intv)throwsIOExceptionpublicfinalvoidwriteShort(intv)throwsIOExceptionpublicfinalvoidwriteInt(intv)throwsIOException//写入一个整型publicfinalvoidwriteLong(longv)throwsIOExceptionpublicfinalvoidwriteFloat(floatv)throwsIOExceptionpublicfinalvoidwriteDouble(doublev)throwsIOExceptionpublicfinalvoidwriteChar(intv)throwsIOException//写入一个字符publicfinalvoidwriteBoolean(booleanv)throwsIOExceptionpublicfinalvoidwriteChars(Strings)throwsIOException//写入一个字符publicfinalintsize()//返回实际写入的字节数}18例:使用数据流读写整数文件。数据写入文件的思路同标准输出捕获异常控制输入结束IntFile.java19对象字节流ObjectInputStream类publicclassObjectInputStreamextendsInputStreamimplementsObjectInput,ObjectStreamConstants{publicObjectInputStream(InputStreamin)throwsIOException//构造方法publicfinalObjectreadObject()throwsIOException,ClassNotFoundException//读取一个对象}20ObjectOutputStream类publicclassObjectOutputStreamextendsOutputStreamimplementsObjectOutput,ObjectStreamConstants{publicObjectOutputStream(OutputStreamout)throwsIOException//构造方法publicfinalvoidwriteObject(Objectobj)throwsIOException//写入一个对象}21对象的串行化一个类只有实现了Serializable接口,其对象才能够通过流进行输入输出。Serializable接口不需要实现任何方法。一个对象可能有各种类型的成员变量,对象序列化包括这些成员变量中的值。通过对象输出流ObjectOutputStream的writeObject()方法可以将对象写入对应的节点流中。通过对象输入流ObjectInputStream的readObject()方法可以从普通的流中读取对象,读取后返回的类型是Object类型,通过强制转换可将其转换为原来的类型。22例importjava.io.*;classMmimplementsSerializable{intx=10;inty=20;Strings;voidtt(){System.out.println(hi);}}publicclassSer{publicstaticvoidmain(Stringargs[])throwsException{Mma=newMm();a.y=200;a.s=hi;FileOutputStreamf=newFileOutputStream(my.dat);ObjectOutputStreamb=newObjectOutputStream(f);b.writeObject(a);}}23例importjava.io.*;classMmimplementsSerializable{intx=10;inty=20;Strings;voidtt(){System.out.println(hi);}}publicclassGet{publicstaticvoidmain(Stringargs[])throwsException{FileInputStreamf=newFileInputStream(my.dat);ObjectInputStreamb=newObjectInputStream(f);Mms=(Mm)b.readObject();System.out.println(s.y);System.out.println(s.s);s.tt();}}24图:各种输入/输出流及其读/写方法字节数组buffer基本数据类型变量i键盘文件输入流显示器文件对象objSystem.in.read(buffer)DataInputStreamreadInt()ObjectInputStreamreadObject()FileInputStreamread(buffer)FileInputStream输出流System.out.print(i)ObjectInputStreamwriteObject(obj)FileOutputStreamwrite(buffer)FileOutputStreamSystem.out.print(obj.toString())DataOutputStreamwriteInt(i)25管道字节流PipedInputStream类PipedOutputStream类PipedInputStreamin=newPipedInputStream();try{PipedOutputStreamout=newPipedOutputStream(in);}catch(IOExceptionioe){}26例:使用管道流实现发牌程序图:发牌程序中多个线程对象间的管道流SendCard.java27Reader方法基本方法:intread()intread(char[]cbuf)intread(char[]cbuf,intoffset,intlength)其他方法:voidclose()boolean
本文标题:第九章输入输出流和文件操作
链接地址:https://www.777doc.com/doc-3572238 .html