8+Java输入与输出_第1页
8+Java输入与输出_第2页
8+Java输入与输出_第3页
8+Java输入与输出_第4页
8+Java输入与输出_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章Java输入与输出,第八章Java输入与输出,8.1输入与输出8.1.1JAVA的输入/输出机制8.1.2JAVA.IO8.2流的应用8.2.1字节流8.2.2字符流8.2.3过滤流8.2.4对象流8.3访问文件8.3.1File对象8.3.2随机访问文件,8.1输入与输出,8.1.1JAVA的输入/输出机制1.输入与输出对外部设备的输入/输出、文件读写、网络读写及线程之间的数据通信操作。2.什么是流?流是一种数据的源头和目的地之间的通信途径,JAVA使用流(stream)来执行输入输出功能。包括输入流与输出流。,8.1.2JAVA.IO,JAVA.IO是系统提供的软件包之一,专门为应用程序提供处理I/O操作的各种类。,JAVA.IO包中的流结构,1.InputStream和OutputStream这两个类为字节流的输入和输出类,是所有面向字节的输入/输出流的父类。声明了多个用于字节输入和输出的方法,包括读取数据、写入数据、标记位置等。2.Reader和Write为字符流的输入和输出类,是所有面向字符的输入/输出流的父类。这两个类是以Unicode字符为单位进行读写的。,8.1.2JAVA.IO,3.File和RandomAccessFile这两个类为对文件操作的类。File类记载文件信息并以顺序方式访问文件,RandomAccessFile类以随机方式访问文件。,8.1.2JAVA.IO,什么是流?流(stream)是一组有序的数据序列。根据操作的类型,分为输入流和输出流两种。输入流的指向称为源,程序从指向源的输入流中读取数据。当程序需要读取数据时,就会开启一个通向数据源的流,这个数据源可以是文件、内存或是网络连接。而输出流的指向是字节要去的目的地,程序通过向输出流中写入数据把信息传递到目的地。当程序需要写入数据时,就会开启一个通向目的地的流。,8.2流的应用,输入输出流的种类:字节输入流字节输出流字符输入流字符输出流,8.2流的应用,1.字节输入流InputStream字节流是以字节为单位来处理数据的,由于字节流不会对数据做任何转换,因此用来处理二进制的数据。InputStream类是字节输入流的抽象类,它是所有字节输入流的父类,其各种子类实现了不同的数据输入流。这些字节输入流的继承关系如下图所示。,8.2.1字节流,8.2.1字节流,输入流InputStream类的子类,InputStream中的常用方法:,8.2.1字节流,代码示例:从键盘输入一个字符,8.2.1字节流,importjava.io.*;publicclassTestpublicstaticvoidmain(Stringargs)throwsIOExceptionchara;System.out.println(请输入任一字符);a=(char)System.in.read();System.out.println(你输入的字符是+a);,InputStream是抽象类,并不能实例化,实际使用中使用其子类,FileInputStream类是InputStream类的子类。它实现了文件的读取,是文件字节输入流。该类适用于比较简单的文件读取,该类的所有方法都是从InputStream类继承并重写的。创建文件字节输入流常用的构造方法有两种:FileInputStream(StringfilePath)FileInputStream(Filefile),8.2.1字节流,(1)FileInputStream(StringfilePath)该构造方法根据指定的文件名称和路径,创建FileInputStream类的实例对象。语法:filePath:文件的绝对路径或相对路径。,newFileInputStream(filePath);,8.2.1字节流,(2)FileInputStream(Filefile)该构造方法使用File类型的文件对象创建FileInputStream类的实例对象。语法:file:File文件类型的实例对象。,newFileInputStream(file);,8.2.1字节流,importjava.io.*;publicclassTestpublicstaticvoidmain(Stringargs)throwsIOExceptiontryFileInputStreamfis=newFileInputStream(OpenFile.java);intn=512;bytebuffer=newbyten;while(fis.read(buffer,0,n)!=-1),System.out.println();fis.close();catch(IOExceptionioe)System.out.println(ioe);catch(Exceptione)System.out.println(e);,2.字节输出流OutputStreamOutputStream类是字节输出流的抽象类,它是所有字节输出流的父类,其子类实现了不同数据的输出流。继承关系如下图所示。,8.2.1字节流,OutputStream中的方法与InputStream几乎一一对应:,8.2.1字节流,代码示例:标准输出的用法,8.2.1字节流,importjava.io.*;publicclassTestpublicstaticvoidmain(Stringargs)throwsIOExceptionchara=A;System.out.write(a);System.out.write(n);/该行不可省略,同样,OutputStream也是抽象类,并不能实例化,实际使用中使用其子类,FileOutputStream类是OutputStream类的子类。它实现了文件的写入,能够以字节形式写入文件中,该类的所有方法都是从OutputStream类继承并重写的。创建文件字节输出流常用的构造方法有两种:FileOutputStream(StringfilePath)FileOutputStream(Filefile),8.2.1字节流,(1)FileOutputStream(StringfilePath)该构造方法根据指定的文件名称和路径,创建关联该文件的FileOutputStream类的实例对象。语法:filePath:文件的绝对路径或相对路径。,newFileOutputStream(filePath);,8.2.1字节流,(2)FileOutputStream(Filefile)该构造方法使用File类型的文件对象,创建与该文件关联的FileOutputStream类的实例对象。语法:file:File文件类型的实例对象。在file后面,加true会对原有内容进行追加,不加true会将原有内容覆盖。,newFileOutputStream(file);,8.2.1字节流,importjava.io.*;publicclassTestpublicstaticvoidmain(Stringargs)throwsIOExceptiontrySystem.out.print(Input:);intcount,n=512;bytebuffer=newbyten;count=System.in.read(buffer);FileOutputStreamfos=newFileOutputStream(write.txt);fos.write(buffer,0,count);fos.close();System.out.println(Savetowrite.txt);,catch(IOExceptionioe)System.out.println(Filewriteerror:+ioe);,8.2.1字节流,字符流(charactercstreams)用于处理字符数据的读取和写入,它以字符为单位。Reader类和Writer类是字符流的抽象类,它们定义了字符流读取和写入的基本方法,各个子类会依其特点实现或覆盖这些方法。,8.2.2字符流,1.Reader类帮助用户在Unicode流内获得字符数据。该类为抽象类,所以实际使用其子类。直接继承自Reader类的子类图如下:,8.2.2字符流,Reader类是所有字符输入流的父类,它定义了操作字符输入流的各种方法。常用方法如下表所示。,8.2.2字符流,(1)InputStreamReader类InputStreamReader是字节流通向字符流的桥梁。它可以根据指定的编码方式,将字节输入流转换为字符输入流。创建字符输入流常用的构造方法有两种:InputStreamReader(InputStreamin)InputStreamReader(InputStreamin,Stringcname),8.2.2字符流,InputStreamReader(InputStreamin)该构造方法使用默认字符集创建InputStreamReader类的实例对象。语法如下:in:字节流类的实例对象。,8.2.2字符流,newInputStreamReader(in);,InputStreamReader(InputStreamin,Stringcname)该构造方法使用已命名的字符编码方式创建InputStreamReader类的实例对象。语法如下:cname:使用的编码方式名。InputStreamReader类常用的方法如下表所示。,newInputStreamReader(in,cname);,8.2.2字符流,8.2.2字符流,(2)FileReader类FileReader类是Reader类的子类,它实现了从文件中读出字符数据,是文件字符输入流。该类的所有方法都是从Reader类中继承来的。FileReader类的常用构造方法有两种:FileReader(StringfilePath)FileReader(Filefile),8.2.2字符流,FileReader(StringfilePath)该构造方法根据指定的文件名称和路径,创建FileReader类的实例对象。语法如下:filePath:文件的绝对路径或相对路径。,8.2.2字符流,newFileReader(filePath);,FileReader(Filefile)该构造方法使用File类型的文件对象创建FileReader类的实例对象。语法如下:file:File文件类型的实例对象。,newFileReader(file);,8.2.2字符流,例如,利用FileReader读取文件“Example5-1.txt”的内容,输出到控制台上程序代码为:,tryFilef=newFile(C:Example5-1.txt);FileReaderfr=newFileReader(fchardata=newchar512;intrs=0;while(rs=fr.read(data)0)Stringstr=newString(data,0,rs);System.out.println(str);catch(Exceptione)e.printStackTrace();,8.2.2字符流,(3)BufferedReader类BufferedReader类是Reader类的子类,使用该类可以以行为单位读取数据。BufferedReader类的主要构造方法为:该构造方法使用Reader类的对象,创建一个BufferReader对象。语法如下:,8.2.2字符流,newBufferedReader(in);,BufferedReader(Readerin),BufferedReader类中提供了一个ReaderLine()方法,Reader类中没有此方法,该方法能够读取文本行。例如:,8.2.2字符流,FileReaderfr;tryfr=newFileReader(C:Example6.txt);BufferedReaderbr=newBufferedReader(fr);Stringaline;while(aline=br.readLine()!=nullStringstr=newString(aline);fr.close();br.close();catch(Exceptione)e.printStackTrace();,2.Writer类Writer类为字符输出的抽象基础类,可以利用其子类来完成种类型流的输出。直接继承自Writer类的类如下图所示。,8.2.2字符流,Writer类是所有字符输出流的父类,它定义了操作输出流的各种方法。常用方法如下表所示:,8.2.2字符流,(1)OutputStreamWriterOutputStreamWriter是字节流通向字符流的桥梁。写出字节,并根据指定的编码方式,将之转换为字符流。创建字符输出流常用的构造方法有两种。OutputStreamWriter(OutputStreamout)OutputStreamWriter(OutputStreamout,Stringcname),8.2.2字符流,OutputStreamWriter(OutputStreamout)该构造方法使用默认字符集创建OutputStreamWriter类的实例对象。语法如下:out:字节流类的实例对象。,8.2.2字符流,newOutputStreamReader(out);,OutputStreamWriter(OutputStreamout,Stringcname)该构造方法使用已命名的字符编码方式创建OutputStreamWriter类的实例对象。语法如下:cname:使用的编码方式名。,newOutputStreamWriter(out,cname);,8.2.2字符流,OutputStreamReader类常用的方法如下表所示:,8.2.2字符流,(2)FileWriter类FileWriter类是Writer类的子类,它实现了将字符数据写入文件中,是文件字符输出流。该类的所有方法都是从Writer类中继承来的。FileWriter类的常用构造方法有两种:FileWriter(StringfilePath)FileWriter(Filefile),8.2.2字符流,FileWriter(StringfilePath)该构造方法根据指定的文件名称和路径,创建关联该文件的FileWriter类的实例对象。语法如下:,8.2.2字符流,newFileWriter(filePath);,FileWriter(Filefile)该构造方法使用File类型的文件对象,创建与该文件关联的FileWriter类的实例对象。语法如下:,8.2.2字符流,newFileWriter(file);,例,“Example5-1.txt”的内容复制到文件“Example6.txt”中。具体代码为:,tryFilef=newFile(C:,Example6.txt);if(!f.exists()/如果文件不存在f.createNewFile();/创建新文件FileReaderfr=newFileReader(C:Example5-1.txt);/FileWriterfWriter=newFileWriter(f);/intis;while(is=fr.read()!=-1)fWriter.write(is);/将数据写入输出流fr.close();fWriter.close();catch(Exceptione)e.printStackTrace();,8.2.2字符流,(3)BufferedWriter类BufferedWriter类是Writer类的子类,该类可以以行为单位写入数据。BufferedWriter类常用的构造方法为:该构造方法使用Writer类的对象,来创建一个BufferWriter对象。语法如下:,newBufferedReader(out);,BufferedWriter(Writerout),8.2.2字符流,BufferedWriter类提供了一个newLine()方法,Writer类中没有此方法。该方法是换行标记。例如:,Filefile=newFile(C:Example6.txt);FileWriterfos;tryfos=newFileWriter(file,true);BufferedWriterbw=newBufferedWriter(fos);bw.write(Example);bw.newLine();bw.write(Example);bw.close();catch(IOExceptione)e.printStackTrace();,8.2.2字符流,(4)PrintWriter类PrintWriter是打印输出流,该流把Java语言的内构类型以字符表示形式送到相应的输出流中,可以以文本的形式浏览。创建该打印输出流常用的构造方法有两种。PrintWriter(Writerout)PrintWriter(OutputStreamout),8.2.2字符流,PrintWriter(Writerout)该构造方法使用Writer类的对象,创建一个PrintWriter对象。语法:,newPrintWriter(out);,8.2.2字符流,PrintWriter(OutputStreamout)该构造方法使用OutputStream类的对象,创建一个PrintWriter对象。语法:,newPrintWriter(out);,8.2.2字符流,PrintWriter类常用的方法如下表所示:,8.2.2字符流,使用PrintWriter实现文件的复制执行过程为:,Filefilein=newFile(C:Example6.txt);Filefileout=newFile(C:Example7.txt);tryBufferedReaderbr=newBufferedReader(newFileReader(filein);/创建一个PrintWiter对象PrintWriterpw=newPrintWriter(newFileWriter(fileout);intb;/读出文件“Example6.txt”中的数据while(b=br.read()!=-1)pw.println(b);/写入文件中br.close();/关闭流pw.close();/关闭流catch(Exceptione)e.printStackTrace();,过滤器流(FilterStream)是为某种目的过滤字节或字符的数据流。基本输入流提供的读取方法,只能用来读取字节或字符。而过滤器流能够读取整数值、双精度值或字符串。但需要一个过滤器类来包装输入流。DataInputStream和DataOutputStream类分别是FilterInputStream和FilterOutputStream类的子类。它们分别实现了DataInput和DataOutput接口,该接口中定义了独立于具体机器的带格式的读写操作,从而可以实现对Java中的不同基本类型数据的读写。,8.2.3过滤流,例,从文件中读取数字。可以先创建一个FileInputStream类的对象,然后把该类传递给一个DataInputStream的构造方法。,FileInputStreamfis=newFileInputStream(Example.txt);DataInputStreamdis=newDataInputStream(fis);doubled=dis.readDouble();dis.close();,8.2.3过滤流,再例如,把数据写入文件。可以先创建一个FileOutputStream类的对象,然后把该类传递给一个DataOutputStream的构造方法。,FileOutputStreamfos=newFileOutputStream(Example.txt);DataOutputStreamdos=newDataOutputStream(fos);dos.writeBytes(Example);dos.close();,8.2.3过滤流,使用对象输入输出流实现对象序列化可以直接存取对象。将对象存入一个流称为序列化。而从一个流将对象读出称为反序列化。,8.2.4对象流,1.ObjectInput与ObjectOutputObjectInput接口与ObjectOutput接口分别继承了DataInput接口和DataOutput接口,提供了对基本数据类型和对象序列化的方法。使用对象序列化功能可以非常方便地将对象写入输出流,或者从输入流读取对象。ObjectInput接口与ObjectOutput接口中定义的对象反序列化和序列化方法如下。,8.2.4对象流,(1)readObject()所谓反序列化就是从输入流中获取序列化的对象数据,用这些数据生成新的Java对象。该方法定义在ObjectInput接口中,由ObjectInputStream类实现。语法如下:object:Java对象。注意:使用readObject()方法获取的序列化对象是Object类型的,必须通过强行类型转换才能使用。,Objectobject=readObject(),8.2.4对象流,(2)writeObject()序列化就是将对象写入到输出流,这个输出流可以是文件输出流、网络输出流以及其他数据输出流。该方法定义在ObjectOutput接口中,由ObjectOutputStream类实现。语法:object:将要序列化的对象。注意:被序列化的对象必须实现java.io.Serializable接口,否则不能实现序列化。,writeObject(object);,8.2.4对象流,2.ObjectInputStream与ObjectOutputStreamJava提供了ObjectInputStream和ObjectOutputStream类读取和保存对象,它们分别是对象输入流和对象输出流。ObjectInputStream类和ObjectOutputStream类是InputStream类和OutputStream类的子类,继承了它们所有的方法。创建ObjectInputStream类的构造方法为:当准备从读取一个对象到程序中时,可以用ObjectInputStream类创建对象输入流。语法如下:,ObjectInputStream(InputStreamin),newObjectInputStream(in);,8.2.4对象流,ObjectInputStream类读取基本数据类型的方法为:对象输入流使用该方法读取一个对象到程序中。例如:创建ObjectOutputStream类的构造方法为:,readObject(),FileInputStreamfis=newFileInputStream(Example.txt);ObjectInputStreamois=newObjectInputStream(fis);ois.readObject();ois.close();,ObjectOutputStream(OutputStreamout),8.2.4对象流,当准备将一个对象写入到输出流(即序列化),可以用ObjectOutputStream类创建对象输出流。语法如下:ObjectOutputStream类写入基本数据类型方法为:对象输出流使用该方法将对象写入到文件中。例如:,FileOutputStreamfos=newFileOutputStream(Example.txt);ObjectOutputStreamobs=newObjectOutputStream(fos);obs.writeObject(Example);obs.close();,newObjectOutputStream(out);,WriteObject(),8.2.4对象流,8.3.1File对象File类是一个与流无关的类。File类的对象可以获取文件及其文件所在的目录、文件的长度等信息。创建一个File对象的常用构造方法有3种:(1)File(Stringpathname)(2)File(Stringpath,Stringfilename)(3)File(Filefile,Stringfilename),8.3访问文件,(1)File(Stringpathname)该构造方法通过指定的文件路径字符串来创建一个新File实例对象。语法:pathname:文件路径字符串,包括文件名称。就是将一个代表路径的字符串转换为抽象的路径。,newFile(filename);,8.3.1File对象,(2)File(Stringpath,Stringfilename)该构造方法根据指定的父路径字符串和子路径字符串(包括文件名称)创建File类的实例对象。语法:path:父路径字符串。filename:子路径字符串,不能为空。,newFile(path,filename);,8.3.1File对象,(3)File(Filefile,Stringfilename)该构造方法根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建File类的实例对象。语法:file:是父路径对象。filename:子路径字符串。,newFile(file,filename);,8.3.1File对象,File类包含了文件和文件夹的多种属性和操作方法。常用的方法如下表所示。,8.3.1File对象,使用RandomAccessFile类可以读取任意位置数据的文件。RandomAccessFile类既不是输入流类的子类,也不是输出流类的子类。RandomAccessFile类常用的构造方法有两种:RandomAccessFile(Stringname,Stringmode)RandomAccessFile(Filefile,Stringmode),8.3.2随机访问文件,(1)RandomAccessFile(Stringname,Stringmode)语法如下:name:和系统相关的文件名。mode:用来决定创建的流对文件的访问权利,它可以是r、rw、rws或rwd,r代表只读,rw代表可读写,rws代表同步写入,rwd代表将更新同步写入。,newRandomAccessFile(name,mode);,8.3.2随机访问文件,(2)RandomAccessFile(Filefile,Stringmode)语法如下:file:一个File类的对象。RandomAccessFile类常用的方法如下表所示:,newRandomAccessFile(file,mode);,8.3.2随机访问文件,8.3.2随机访问文件,利用上述方法显示文件本身源代码的执行过程如下:,8.3.2随机访问文件,tryFilef=newFile(C:Example8.txt);RandomAccessFileraf=newRandomAccessFile(f,rw);/创建随机访问文件为读写longfilepoint=0;/定义文件总长度变量longfilel=raf.length();/获取文件的长度while(filepointfilel)Stringstr=raf.readLine();/从文件中读取数据System.out.println(str);filepoint=raf.getFilePointer();raf.close();catch(Exceptione)e.printStackTrace();,intdata_arr=12,31,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论