《Java与面向对象程序》-8.4字符流_第1页
《Java与面向对象程序》-8.4字符流_第2页
《Java与面向对象程序》-8.4字符流_第3页
《Java与面向对象程序》-8.4字符流_第4页
《Java与面向对象程序》-8.4字符流_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

学习目标掌握字符流特点掌握字符流基本用法主要内容字符输入流Reader字符输出流Writer文件字符流缓冲流转换流字符输入流Reader

字符流Reader:是一个抽象类。它是所有以字符为单位的输入流的父类。Reader类关系图字符输入流ReaderReader类中提供的部分成员方法返回值类型方法名称功能intread()从流中选取一个字符,并以int类型的形式返回。如果读到文件的尾部,返回-1;如果发生错误,抛出IOException异常intread(charcbuf[])从流中读取字符并存入char型数组cbuf中,返回值代表真正读取的字符个数intread(charcbuf[],intoff,intlen)从流中读取len个字符并存入char型数组cbuf从偏移量off开始的位置。该成员方法返回读取字符的个数longskip(longn)跳过流中n个字符,该成员方法返回跳过的字符个数。如果到达流的尾部,或者由于输入错误终止处理,该值将小于nbooleanready()如果预读取的流已经准备就绪,返回true,否则返回falsevoidclose()关闭该流并释放与之关联的所有资源字符输出流Writer在Java语言中,与Reader对应的抽象类是Writer类,它是所有以字符为单位的输出流的父类,Writer类层次结构如图所示。字符输出流WriterWriter定义了字符输出流在实现写操作时需要的大部分成员方法,Writer类成员方法如图所示。返回值类型方法名称功能voidwrite(intc)将字符c写入到输出流voidwrite(charcbuf[])将char类型数据cbuf中的所有字符写入到输出流voidwrite(charcbuf[]intoff,intlen)

将char类型数据cbuf中,从偏移量off开始的len个字符写入输出流voidwrite(Stringstr)将字符串str中的所有字符写入到输出流voidwrite(Stringstr,intoff,intlen)将字符串str中,从偏移量off开始的len个字符写入到输出流voidflush()刷新输出流的缓冲writerappend(charc)将指定字符c添加到输出流voidclose()关闭输出流,但在这之前会先刷新它文件字符流1.文件字符输出流FileWriterFileWriter是OutputStreamWriter的子类,它是操作文件的字符输出流,继承了OutputStreamWriter类的所有方法,并且实现了抽象方法write(),专门用于把数据写入文件。FileWriter的构造方法如下:

FileWriter(Stringname)throwsIOException;FileWriter(Stringname,booleanappend)throwsIOException;FileWriter(Filefile)throwsIOException;FileWriter(Filefile,booleanappend)throwsIOException;文件字符流【例8_7】向文件中写入字符。importjava.io.*;publicclassEx8_7{ publicstaticvoidmain(String[]args)throwsException{ //创建一个FileWriter对象用于向文件中写入数据,默认改写方式打开文件 FileWriterwriter=newFileWriter("d:/1/tt.txt"); Stringstr="program\r\nIloveJava~"; writer.write(str);//将字符数据写入到文本文件中writer.write("\r\n");//将输出语句换行writer.close();//关闭写入流,释放资源 }}文件字符流2.文件字符输入流FileReaderFileReader是OutputStreamReader的子类,它是操作文件的字符输入流,继承了OutputStreamReader类的所有方法,并且实现了抽象方法read(),专门用于读出数据。FileReader的构造方法如下:FileReader(Filefile);FileReader(Stringname);文件字符流【例8_8】使用字符输入流读取文件中的字符。importjava.io.*;publicclassEx8_8{publicstaticvoidmain(String[]args)throwsException{ //创建一个FileReader对象用来读取文件中的字符 FileReaderreader=newFileReader("tt.txt"); intch;//定义一个变量用于记录读取的字符 while((ch=reader.read())!=-1){//循环判断是否读取到文件的末尾 System.out.print((char)ch);//不是字符流末尾就转为字符打印 } reader.close();//关闭文件读取流,释放资源 }}缓冲流缓冲流在内存中设置一个内部缓冲区,用来成批处理数据。如从文件读取数据时,缓冲流可以一次读取若干数据到缓冲区,然后程序从缓冲区依次取出就可以了;向文件写入数据时,将数据暂时写入缓冲区,缓冲区满或关闭流时再将缓冲区中的数据一次性写入文件。缓冲流减少了读写外设的次数,可大幅度提高程序读写的效率。

缓冲流是一种包装流类,以Buffered开头,分为包装字符流的BufferedReader和BufferedWriter类,以及包装字节流的BufferedInputStream与BufferedOutputSteam类。缓冲流缓冲流类的构造方法:在使用BufferedOutputSteam或BufferedWriter进行输出时,数据首先写入缓冲区。当缓冲区满时,其中的数据写入缓冲流所处理的输出流out。缓冲输出流的方法flush()可以强制将缓冲区的内容全都写入输出流。BufferedReader(Readerin,intsize):缓冲字符输入流BufferedWriter(Writerout,intsize):缓冲字符输出流BufferedInputStream(InputStreamin,intsize):缓冲字节输入流BufferedOutputStream(OutputStreamout,intsize):缓冲字节输出流缓冲流

BufferedReader常用方法BufferedWriter常用方法返回值类型方法名称功能intread()读取单个字符intread(char[]cbuf,intoff,intlen)将字符读入数组的某一部分StringreadLine()读取一个文本行longskip(longn)跳过n个字符voidclose()关闭该流返回值类型方法名称功能voidWrite(intc)写入单个字符voidwrite(char[]cbuf,intoff,intlen)写入字符数组的某一部分voidwrite(Strings,intoff,intlen)写入字符串的某一部分voidnewLine()写入一个行分隔符voidflush()刷新该流的缓冲voidclose()关闭该流缓冲流BufferedInputSteam常用方法BufferedOutputSteam常用方法返回值类型方法名称功能intread()从输入流读取下一个数据字节intread(byte[]b,intoff,intlen)在此字节输入流中从给定的偏移量开始将各字节读取到指定的byte数组中voidclose()关闭此输入流并释放与该流关联的所有系统资源返回值类型方法名称功能voidWrite(intb)将指定的字节写入此缓冲的输出流voidwrite(byte[]b,intoff,intlen)将指定byte数组中从偏移量off开始的len个字节写入此缓冲的输出流voidflush()刷新此缓冲的输出流缓冲流【例8-9】文件的复制。Ex8_9.java

程序中用命令行参数args[0]、args[1]作为要复制的源文件和目标文件的名字,执行程序时请为命令行参数args设置值(Run

Runconfigurations…),如图所示。注意:当我们用上面的程序复制非文本类型文件时,可能会发生复制错误。如复制一个图片文件,可能会造成复制后的文件打不开。非文本类型的文件不可以用字符流进行读写操作。想想如何用缓冲字节流实现非文本文件的复制?编程试一下。转换流转换流也是一种包装流类,其中OutputStreamWriter是对OutputStream的包装,它本身是Writer的子类,可以将一个字节输出流包装成字符输出流;而InputStreamReader是对InputStream的包装,它是Reader的子类,可以将一个字节输入流包装成字符输入流。转换流【例8-10】借助转换流实现控制台数据到文件的快速读写。Ex8_10.java

这个程序实现了字节流和字符流的转换。将字节流转换为字符流,在程序中可以实现直接用字符流的方法来完成读写。需要注意的是,在使用转换流时,只能针对操作文本文件的字节流进行转换,如果字节流操作的是一张图片,此时转换为字符流就会造成数据丢失。【案例8-2】简易文本文件编辑器案例描述本案例编写一个简易文本文件编辑器程序,以命令行方式提供几个记事本功能选择,实现在本地新建文件、打开文件和修改文件内容等功能。初始运行结果如下:设计目标学会分析“简易文本文件编辑器”程序的实现思路;掌握字符缓冲流、文件字符流操作本地文件的方法;能够独立完成简易文件编辑器程序源代码的编写。【案例8-2】简易文本文件编辑器实现思路我们将所有文件编辑器功能封装在类FileEditor中,在类中定义5个静态方法实现主菜单中的新建文件、打开文件、修改文件、保存文件以及退出功能;因多个方法中操作的文件内容有关联,所以在FileEditor中设置String型静态变量path以保存文件路径、message保存文件内容。具体如下:

定义FileEditor类,声明静态变量path(String型)和message(String型)以保存文件绝对路径和文件内容;定义静态方法createFile(),创建文件、并通过控制台输入要录入到文件中的内容;定义静态方法openFile(),打开已存在的文件,并在文件尾追加内容;【案例8-2】简易文本文件编辑器定义

温馨提示

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

评论

0/150

提交评论