您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > Chapter 13 文件操作
Chapter13文件处理13-1关于流“流”是一种抽象观念,如从键盘输入数据、将结果输出到显示器、读取与保存文件等操作皆视为流的处理。Java里的流是由字符(characters)或位(bits)所组合成的,我们可通过它来读写数据,甚至可以通过它连接数据来源(datasource),并可以将数据以字符或位数组的形式保存。资料数据01010110101101000100100100111...由程序读取由程序读取程序执行结果程序运行结果01010110101101000100100100111...屏幕/档案显示器/文件读取写入inputstreamoutputstreamstream以数据的读取或写入而言,串可分为“输入流”(inputstream)与“输出流”(outputstream)两种,下图说明了流如何做为文件处理的桥梁。java.lang.Objectjava.lang.ObjectReaderReaderOutputStreamOutputStreamWriterWriterInputStreamInputStreamBufferedReaderBufferedReaderBufferedWriterBufferedWriterInputStreamReaderInputStreamReaderOutputStreamWriterOutputStreamWriterFileWriterFileWriterFileReaderFileReaderFileInputStreamFileInputStreamFileOutputStreamFileOutputStream用来处理纯文字文件或二进制文件用来处理纯文字文件在Java里,我们可以通过InputStream、OutputStream、Reader与Writer类来处理流的输入与输出。InputStream与OutputStream类通常是用来处理“位流”,也就是二进制文件。Reader与Writer类则是用来处理“字符流”,也就是纯文本文件。一般不会直接使用这些类,而是根据这些类所派生出的子类来做文件的处理。与流相关的类可区分为“输入流”与“输出流”两种,在Java里通常是通过流类别的构造函数来创建流对象,创建好对象之后,再利用这些对象的read()和write()方法来读取或写入数据。使用完流对象之后,必须用close()方法来关闭流,并结束数据来源的处理。13-2使用Reader与Writer类Reader与Writer类可用来处理字符串的读取和写入的操作通常是以它们的派生类来创建实体对象,再利用对象来处理读写操作。表13-1,13-2分别列出了Reade和Writer类所提供的方法表13-1Reader类和Write类方法主要功能voidclose()关闭流intread()读取流中的一个字符intread(char[]cbuf)从流读取数据,并放到字符数组cbuf中intread(char[]cbuf,intoff,intlen)从流读取并放到数组中的某个范围(off表示数组索引;len表示读取字符数)longskip(longn)跳过n个字符不读取表13-2Writer类的方法方法主要功能voidclose()关闭流abstractvoidflush()将缓冲区的数据写到文件里。注意这是抽象方法,其明确的定义编写在Writer的子类里voidwrite(char[]cbuf)将字符数组输出到流voidwrite(char[]cbuf,intoff,intlen)将字符数组依指定的格式输出到流中(off表示数组索引;len表示写入字符数)voidwrite(intc)将单一字符c输出到流中voidwrite(Stringstr)将字符串str输出到流中voidwrite(Stringstr,intoff,intlen)将字符串str输出到流(off表示数组索引;len表示写入字符数)13-2-1文件的读取使用FileReader类使用FileReader类读取文件,必须先调用FileReader()构造函数产生FileReader类对象,再利用它调用read()方法.例子://app13_1,使用FileReader类importjava.io.*;publicclassapp13_1{publicstaticvoidmain(Stringargs[]){chardata[]=newchar[1024];FileReaderfr=newFileReader(“c:\donkey.txt);//注意:donkey.txt实现建立好的文件intnum=fr.read(data);Stringstr=newString(data,0,num);System.out.println(“Characterread=“+num);System.out.println(str);fr.close();}}13-2-2文件的写入-使用FileWriter类文件的写入与文件的读入颇为相似,要使用FileReader类读取文件,必须先调FileReader()构造函数产生FileReader类的对象,再利用它来调用read()方法//app13_2,使用FileWriter类importjava.io.*;publicclassapp13_2{publicstaticvoidmain(Stringargs[])throwsIOException{FileWriterfw=newFileWriter(“c:\hello.txt);chardata[]={'H','e','l','l','o','','J','a','v','a','!','\r','\n'};Stringstr=Endoffile;fw.write(data);//将字符数组写到文件里fw.write(str);//将字符串写到文件里fw.close();}}13-2-3文件的读取-使用BUfferedReader类BufferedReader类可用来读取字符缓冲区里的数据,它继承自Reader类,因而也可以使用Reader类所提供的方法。表13-5,13-6列出了BufferedReader类常用的构造函数与方法。表13-5BufferReader的构造函数构造函数主要功能BufferedReader(Readerin)创建缓冲区字符输入流BufferedReader(Readerin,intsize)创建缓冲区字符输入流,并设置缓冲区大小注意:必须首先创建Reader对象,然后才能创建BufferedReader对象。表13-5BufferReader的方法方法主要功能voidclose()关闭流intread()读取单一字符intread(char[]cbuf,intoff,intlen)读取字符并写入字符数组(off表示数组索引;len表示读取位数)longskip(longn)跳过n个位StringreadLine()读取一行字符串欲使用BufferedReader类来读取缓冲区里的数据,必须先创建FileReader对象,再用它为参数来创建BufferedReader类的对象,接下来就可以读取缓冲区里的数据.先建好如图13-6所示的数据,并将其保存成number.txt图13-6number.txt的内容//app13_3,从缓冲区里读入数据importjava.io.*;classapp13_3{publicstaticvoidmain(Stringargs[])throwsIOException{Stringstr;intcount=0;FileReaderfr=newFileReader(c:\\Java\\number.txt);BufferedReaderbfr=newBufferedReader(fr);while((str=bfr.readLine())!=null){//每次读取行,直到文件结束count++;//计算读取的行数System.out.println(str);}System.out.println(count+linesread);fr.close();//关闭文件}}13-2-4文件的读取-使用BufferedWriter类BufferedWrite类的写入过程与BufferedReader类的读出过程非常相似,必须先创建FileWriter对象,再以它为参数来创建BufferedWrite类的象然后利用此对象将数据写入缓冲区里。所不同的是,缓冲区的数据要用flush()方法将其清空,也就是将缓冲区的数据写入文件中。BufferedWriter类的构造函数以及方法大家可以参考上一节的内容。范例:BufferedWriter类的操作要求:先将5个随机数写入缓冲区,再将缓冲区的内容全部清空到文件里。//app13_4,将数据写到缓冲区内importjava.io.*;classapp13_4{publicstaticvoidmain(Stringargs[])throwsIOException{FileWriterfw=newFileWriter(“c:\java\text.txt”);BufferedWriterbfw=newBufferedWriter(fw);for(inti=1;i=5;i++){//写随机数到缓冲区bfw.write(Double.toString(Math.random)));bfw.newLine();//写入还行符号}bfw.flush();//将缓冲区内的数据写到文件里bfw.close();//关闭文件}}注意:BufferedWriter.write()仅仅把数据写入到缓冲区,在关闭文件之前必须调用flush()来把缓冲区的数据写入到文件中。13-3-1使用InputStream与OutputStream类InputStream与OutputSteram类是Java里用来处理以位(bit)为主的流,也就是说,除了纯文本文件之外,它们也可用来访问二进制文件(binaryfile)的数据。这两个类均继承自Java.lang.Object类,但通常不直接使用它们来处理文件,而是使用它们的子类FileInputStream与FileOutputStream所创建的对象来处理.13-3-1文件的写入-使用FileInputStream类FileInputStream继承自InputStream类,主要用来处理以“位为主”的输入工作。构造函数主要功能FileInputStream(Stringname)根据所给予的字符串创建FileInputStream类的对象表13-9FileInputSteam的构造函数表13-10FileInputSteam的方法方法主要功能intavailable()取得读取位流的位数voidclose()关闭位流longskip(longn)在位流里掠过n个位的数据范例:FileInputStream类的操作要求:新建一文本,编辑后保存位d:\test.txtintread()从输出流读取一个字节intread(byte[]b)从输出流读取位数据,并把它存放到位数组bintread(byte[]b,intoff,intlen)从输出流读取位数据,并存放到指定的数组中(off表示数组索引;len表示读取位数)//app13_5,利用FileInputStream读取文件importjava.io.*;classapp13_5{publicstaticvoidmain(Stringargs[])throwsIOException{FileInputStreamfi=newFileInputStream(“d:\test.txt”);System.out.println(“filesize=“+fi.available());//创建byte数据byteba[]=newbyte[fi.av
本文标题:Chapter 13 文件操作
链接地址:https://www.777doc.com/doc-3322597 .html