面向对象程序设计第21讲 Java的输入与输出流(下)_第1页
面向对象程序设计第21讲 Java的输入与输出流(下)_第2页
面向对象程序设计第21讲 Java的输入与输出流(下)_第3页
面向对象程序设计第21讲 Java的输入与输出流(下)_第4页
面向对象程序设计第21讲 Java的输入与输出流(下)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

第21讲Java的输入与输出流(下)字符流用户程序有时需要读取其他格式的数据,如Unicode格式的文字内容,Java提供了相应的输入输出流:字符流。字符流中的大多数的类都能在字节流中找到相应的类。字符流分为Reader和Writer两个类,分别实现字符的输入与输出。

字符流提供了处理字符的输入/输出的方法,包括两个抽象类Reader和Writer。字符流Reader指字符流的输入流,用于输入,而Writer指字符流的输出流,用于输出。Reader和Writer使用的是Unicode,可以对不同格式的流进行操作。从Reader和Writer派生出的子类的对象都能对Unicode字符流进行操作,由这些对象来实现与外设的连接。

Reader类和Writer类成员方法主要功能publicabstractvoidclose()throwsIOException关闭输入流,并释放占用的所有资源publicvoidmark(int

readlimit)throws

IOException在输入流当前位置加上标记publicboolean

markSupported()测试输入流是否支持标记(mark)publicintread()throwsIOException从输入流中读取一个字符publicintread(charc[])throwsIOException将输入的数据存放在指定的字符数组publicabstractintread(charc[],int

offset,int

len)throwsIOException从输入流中的offset位置开始读取len个字符,并存放在指定的数组中publicvoidreset()throwsIOException将读取位置移至输入流标记之处publiclongskip(longn)throwsIOException从输入流中跳过n个字节publicbooleanready()throwsIOException测试输入流是否准备完成等待读取Reader类常用方法成员方法主要功能publicabstractvoidclose()throwsIOException关闭输出流,并释放占用的所有资源publicvoidwrite(intc)throwsIOException写一个字符publicvoidwrite(charcbuf[])throws

IOException写一个字符数组publicabstractvoidwrite(charcbuf[],int

offset,int

len)throwsIOException将字符数组cbuf中从offset位置开始的len个字符写到输出流中public

voidwrite(Stringstr)throwsIOException写一个字符串publicvoidwrite(Stringstr,int

offset,int

len)throws

IOException将字符串从offset位置开始,长度为len个字符数组的数据写到输出流中publicabstractvoidflush()throwsIOException写缓冲区内的所有数据Writer类常用方法FileReader、FileWriter类用于字符文件的输入输出处理,与文件数据流FileInputStream、FileOutputStream的功能相似。其构造方法如下:publicFileReader(Filefile)throwsFileNotFoundExceptionpublicFileReader(Stringfilename)throwsFileNotFoundExceptionpublicFileWriter(Filefile)throwsIOExceptionpublicFileWriter(String

fileName,booleanappend)throwsIOExceptionFileReader从超类中继承了read、close等方法,FileWriter从超类中继承了write、close等方法。例:FileReaderin=newFileReader("java11.txt");字符文件流FileReader和FileWriter类importjava.io.*;publicclassEx11_5{publicstaticvoidmain(Stringargs[]){

FileReader

fr;

int

ch;try{

fr=newFileReader("c:\\Ex11_5.java");

while((ch=fr.read())!=-1){

System.out.print((char)ch);}}catch(Exceptione){e.printStackTrace();}}}例11.5用FileReader一个字符一个字符地读取整个文件。FileReader和FileWriter类以字符为单位进行输入输出,无法进行整行输入与输出,数据的传输效率很低。Java提供BufferedReader和BufferedWriter类以缓冲区方式进行输入输出,其构造方法如下:publicBufferedReader(Readerin)publicBufferedReader(Reader

in,int

sz)publicBufferedWriter(Writerout)publicBufferedWriter(Writer

out,int

sz)BufferedReader流能够读取文本行,方法是readLine()。字符缓冲流BufferedReader类和BufferedWriter类字符缓冲流BufferedReader类和BufferedWriter类(续)通过向BufferedReader传递一个Reader对象或者Reader子类对象来创建一个BufferedReader对象,如:BufferedReader

br=BufferedReader(newFileReader("java11.txt"));

然后再从流br中读取java11.txt中的内容。类似的,可以将BufferedWriter流与FileWriter流连接起来,然后通过BufferedWriter流将数据写到目的地,例如:

FileWriter

fw=newFileWriter("java11.in");

BufferedWriter

bw=newBufferedWriter(fw);然后使用BufferedReader类的成员方法write(Stringsint

off,int

len)把字符串s写到java11.in中,参数off是字符串s开始处的偏移量,len是写入的字符长度。importjava.io.*;publicclassEx11_6{publicstaticvoidmain(Stringargs[]){

FileReader

fr;

BufferedReader

br;

int

ch;try{

fr=newFileReader("c:\\Ex11_6.java");

br=newBufferedReader(fr);

while((ch=br.read())!=-1){

System.out.print((char)ch);}}catch(Exceptione){ e.printStackTrace(); }}}例11.6在例11.5中按字符一个一个的读取,效率比较低,现在应用BufferedWriter类来优化它,每次读取若干个字符。RandomAccessFile类创建的流与前面的输入输出流不同,RandomAccessFile类独立于字节流和字符流体系之外,不具有字节流和字符流的任何特性,它直接继承自Java的基类Object。RandomAccessFile类有两个构造方法。RandomAccessFile(Stringname,Stringmode):参数name用来确定一个文件名,给出创建的流的源,也可以是目的地。参数mode用来决定创建流对文件的访问权限,其值可以取r(只读)或者rw(可读写)。注意没有只写方式(w)。RandomAccessFile(Filefile,Stringmode):参数file是一个File对象,给出创建流的源,也可以是目的地。参数mode与前面的含义是一致的。随机读写文件成员方法主要功能publicvoidclose()throwsIOException关闭流,并释放占用的所有资源publicvoidseek(longpos)throwsIOException查找随机文件指针的位置publiclonglength()throwsIOException求随机文件的字节长度publicfinaldoublereadDouble()throws

IOException随机文件浮点数的读取publicfinalint

readInt()throws

IOException随机文件整数的读取publicfinalcharreadChar()throws

IOException随机文件字符的读取publiclonggetFilePointer()throwsIOException获取随机文件指针所指的当前位置publicint

skipBytes(intn)throwsIOException随机文件访问跳过指定的字节数RandomAccessFile类常用方法例11.7应用类RandomAccessFile编写程序,实现将两个磁盘文件"input1.txt"和"input2.txt"中的内容合并,并显示在屏幕上。

importjava.io.*;publicclassEx11_7{publicstaticvoidmain(Stringargs[]){Strings="";try{RandomAccessFilef1=newRandomAccessFile("c:/input1.txt","rw");

RandomAccessFilef2=newRandomAccessFile("c:/input2.txt","rw");s=f1.readLine()+f2.readLine();charc[]=s.toCharArray();

for(inti=0;i<s.length();i++)

System.out.print(c[i]);

System.out.println();}

catch(Exceptione){}}}importjava.awt.*;importjava.awt.event.*;importjava.io.*;publicclassEx11_8extendsWindowAdapterimplementsActionListener{ Framef; Buttonbtn;

TextArea

ta; StringfileName; publicstaticvoidmain(Stringargv[]){ newEx11_8("output.txt");} publicEx11_8(StringfileName){

this.fileName=fileName; f=newFrame(fileName);

f.addWindowListener(this);

btn=newButton("保存文件");

btn.addActionListener(this);

ta=newTextArea(10,40);

f.add(ta,BorderLayout.CENTER);

f.add(btn,BorderLayout.SOUTH); f.pack();

f.setVisible(true); }

实例1

publicvoidactionPerformed(ActionEvente){ try{

FileOutputStream

fout=newFileOutputStream(fileName);bytebuf[]=ta.getText().getBytes();

fout.write(buf);

fout.close();}catch(IOException

ioe){

System.err.println(e);} } publicvoidwindowClosing(WindowEvente){ System.exit(0);}}程序分析:程序引入了系统包。定义了一个主类Ex11_8,继承了类Frame,且实现了事件监听器接口ActionListner。在主类中定义了一个构造方法,实现了图11-8的界面,并增加了事件监听器。方法actionPerformed()应用文件输出流将文本域中的文本写到指定的文件中。windowClosing()方法实现关闭窗口。实例2

importjava.io.*;publicclassEx11_9{publicstaticvoidmain(Stringargs[]){try{

RandomAccessFiler

rf=newRandomAccessFile("c:\\Ex11_9.java","rw");Stringstr;longpof=0;longlof=rf.length();

rf.seek(pof);

inti=1;

while(pof<lof){

str=rf.readL

温馨提示

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

评论

0/150

提交评论