输入输出处理_第1页
输入输出处理_第2页
输入输出处理_第3页
输入输出处理_第4页
输入输出处理_第5页
免费预览已结束,剩余53页可下载查看

下载本文档

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

文档简介

输入输出处理21文件操作FileFile类提供描述目录和文件对象的属性和方法,如获取路径、目录和文件的相关信息,并对它们进行创建、删除、改名等管理。构造方法:File(Stringpathname)File(Stringparent,Stringchild)File(Fileparent,Stringchild)

如:Filef1=newFile("c:\\data\\temp.dat");

Filef2=newFile("c:\\data","temp.dat");Filef3=newFile("c:\\data");Filef4=newFile(f3,"temp.dat");3

实例方法:booleancanRead()booleancanWrite()booleansetReadOnly()booleanexists()booleanisDirectory()booleanisFile()booleanisHidden()longlastModified()booleansetLastModified(longtime)1文件操作File4

实例方法:longlength()String[]list()File[]listFiles()booleanmkdir()booleanmkdirs()booleandelete()booleancreateNewFile()booleanrenameTo(Filedest)1文件操作File5

实例方法:StringgetName()FilegetParentFile()StringgetParent()StringgetPath()booleanisAbsolute()FilegetAbsoluteFile()StringgetAbsolutePath()1文件操作File6importjava.io.*;publicclassFileInfo{publicstaticvoidmain(String[]args)throwsIOException{Filef=newFile(args[0]);System.out.println(f.getAbsolutePath());System.out.println(f.getPath());System.out.println(f.getParent());System.out.println(f.getName());if(f.exists()){System.out.println(f.isDirectory());System.out.println(f.canRead());System.out.println(f.canWrite());System.out.println(f.length()+"字节");System.out.println(f.lastModified());}elseSystem.out.println("noexists");}}运行:javaFileInfoc:\\windows-------------------c:\windowsc:\windowsc:\windowstruetruetrue0字节1168525918000运行:javaFileInfoc:\\windows\\system.ini---------------------------c:\windows\system.inic:\windows\system.inic:\windowssystem.inifalsetruetrue227字节119597391000072输入/输出概述什么是流指数据从起点到终点的通信通道8数据从一个地方"流"到另外一个地方,这种数据流动的通道都可以称为数据流。

数据的起点、终点和数据流类型。输入/输出是相对于程序而言:

程序在使用数据时所扮演的角色有两个:一个是源,一个是目的(终点)。2输入/输出概述9分类:功能上:输入流和输出流输入数据用输入流输出数据用输出流结构上:字节流和字符流

字节流(以字节为处理单位或称面向字节)

字符流(以字符为处理单位或称面向字符)2输入/输出概述103.1字节流的基类:抽象类InputStream和OutputStream

字节流的输入输出操作由这两个类的子类实现。

面向字节--8位。InputStream读取方法:intread():从输入流中读一个字节,返回一个0~255之间的整数。intread(byteb[]):读多个字节到数组中,并返回读取得字节数。intread(byteb[],intoff,intlen):读取长度为len的数据,写入数组b中从索引off开始的位置。3字节流11InputStream的其他方法:skip():跳过流中若干字节数available():返回流中可用(剩余)字节数close():关闭流mark():在流中标记一个位置reset():返回标记过的位置markSupport():是否支持标记和复位操作3字节流12OutputStream的方法:write(intb):将一个整数输出到流中(只输出低位字节)write(byteb[]):将字节数组中的数据输出到流中write(byteb[],intoff,intlen):将数组b中从off指定的位置开始,长度为len的数据输出到流中flush():刷空输出流,并将缓冲区中的数据强制送出close():关闭流3字节流13InputStreamInputStreamFileInputStreamPipedInputStreamFilterInputStreamLineNumberInputStreamDataInputStreamBufferedinputStreamPushbacckInputStreamByteArrayInputStreamSequenceInputStreamStringBufferedInputStreamObjectInputStream3.2字节流类层次图14OutputStreamFileOutputStreamPipedOutputStreamFilterOutputStreamStreamDataOutStreamBufferedOutStreamPrintStreamByteArrayOutputStreamObjectOutStreamOutputStream3.2字节流类层次图151.用于文件I/O

FileInputStream和FileOutputStream2.用于内存数组的流

ByteArrayInputStream和ByteArrayOutputStream3.用于管道的流

PipedInputStream和PipedOutputStream4.提高I/O效率的缓冲流

BufferedInputStream和BufferedOutputStream5.具有过滤功能的流

FilterInputStream和FilterOutputStream6.用于数据转换流(只有8位字节流)

DataInputStream和DataOutputStream3.2字节流类层次图163.3流的编程步骤(1)使用引入语句引入java.io包:

importjava.io.*;(2)根据不同数据源和输入输出任务,建立字节流或字符流对象。(3)用输入输出流对象类的成员方法进行读写操作,需要时,设置读写位置指针。(4)关闭流对象。其中步骤(2)~(4)要考虑异常处理。173.3.1FileInputStream/FileOutputStream(1)创建字节输入文件流FileInputStream类对象FileInputStream类构造方法有:FileInputStream(Stringname)

FileInputStream(Filefile)

例:FileInputStreamfis=newFileInputStream("c:\\1.txt");或:FilemyFile=newFile("c:\\1.txt");FileInputSteamfis=newFileInputStream(myFile);18(2)读取文件信息从FileInputStream流中读取字节信息,一般用read()成员方法:intread()

读流中一个字节,若流结束则返回-1。intread(byteb[])

从流中读字节填满字节数组b,返回所读字节数,若流结束则返回-1。intread(byteb[],intoff,intlen)

从流中读字节填入b[off]开始处,返回所读字节数,若流结束则返回-1。19(3)创建字节输出文件流FileOutputStream类对象FileOutputStream类的构造方法有:FileOutputStream(Stringname)

FileOutputStream(Filefile)例:FileOutputStreamfos=newFileOutputStream("d:\\out.dat");

或:FilemyFile=newFile("d:\\out.dat");FileOutputStreamfos=newFileOutputStream(myFile);20(4)向输出流写信息向FileOutputStream中写入信息,一般用write()方法:voidwrite(intb)

将整型数据的低字节(以字符型)写入输出流。voidwrite(byteb[])

将字节数组b中的数据写入输出流。voidwrite(byteb[],intoff,intlen)

将字节数组b中从off开始的len个字节数据写入输出流。21(5)关闭流当完成一个文件的操作,可用两种方法关闭它:隐式关闭是让系统自动关闭它,Java有自动垃圾回收的功能。显式关闭是使用close()方法。例如:

fis.close();fos.close();22例:完成文件复制功能。用命令行方式提供源文件名和目标文件名。//用法:javaCopyFile源文件名目标文件名importjava.io.*;classCopyFile{publicstaticvoidmain(Stringargs[])throwsIOException{inti;FileInputStreamfin=null;FileOutputStreamfout=null;23try{

try{fin=newFileInputStream(args[0]);}catch(FileNotFoundExceptione){}try{fout=newFileOutputStream(args[1]);}catch(FileNotFoundExceptione){}}

catch(ArrayIndexOutOfBoundsExceptione){}try//复制文件

{while((i=fin.read())!=-1)fout.write(i);}catch(IOExceptione){}fin.close();fout.close();}}24更一般的使用方法:publicclassFileCopy {publicstaticvoidmain(String[]args){try{StringBufferstr=newStringBuffer();

FileInputStreamfin=newFileInputStream("f1.txt");FileOutputStreamfout=newFileOutputStream("f2.txt");intc;while((c=fin.read())!=-1)25{fout.write(c);

str.append((char)c);

}fin.close();fout.close();

Stringstr2=str.toString();

System.out.println(str2);

}catch(Exceptionc){System.out.println(c);}}}263.3.2过滤流FilterInputStream/FilterOutputStream:

对其他输入/输出流进行特殊处理,即在读/写数据的同时可以对数据进行特殊处理。提供了同步机制,使得某一时刻只有一个线程可以访问一个输入/输出流。使用过滤流,首先必须把它连接到某个输入/输出流上,通常在构造方法的参数中指定所要连接的流:protectedFilterInputStream(InputStreamin);protectedFilterOutputStream(OutputStreamout);273.3.2过滤流-DataInputStream/DataOutputStreamDataInputStream/DataOutputStream:

过滤流类的子类提供对基本数据类型,如整数和浮点数的输入/输出构造方法:DataInputStream(InputStreamin)DataOutputStream(OutputStreamout)过滤流其他流28importjava.io.*;classFibOut{publicstaticvoidmain(Stringargs[])

{try{

OutputStreamfos=newFileOutputStream("c:/fib.dat");

DataOutputStreamdos=newDataOutputStream(fos);intcount=0,i=1,j=1;for(;count<20;count++){dos.writeInt(i);intk=i+j;i=j;j=k;}fos.close();}//关闭文件输出流

catch(Exceptione){}System.out.println("文件创建成功!");}}例:在C盘根目录下建立文件FIB.txt,存储Fibonacci数列的前20个数。29importjava.io.*;importjava.text.*;//数据格式化输出需要classFibIn{publicstaticvoidmain(Stringargs[]){

DecimalFormatdf=newDecimalFormat("0000");

try{//创建文件输入流/输入流

FileInputStreamfis=newFileInputStream("c:/fib.txt");

DataInputStreamdis=newDataInputStream(fis);例:建立的文件中读取Fibonacci数据并显示到屏幕上

30for(inti=0;i<20;i++)//读出数据并显示

{if(i%10==0)System.out.println();System.out.print(df.format(dis.readInt()));}fis.close();}//endtrycatch(Exceptione){System.out.println("Exception:"+e);}}//endmain}//endclass31

缓冲流建立一个内部缓冲区,输入输出数据先读写到缓冲区中进行操作,这样可以提高文件流的操作效率。缓冲输出流BufferedOutputStream类提供和FileOutputStream类同样的写操作方法,但所有输出全部写入缓冲区中。当写满缓冲区或关闭输出流时,它再一次性输出到流,或者用flush()方法主动将缓冲区输出到流。当创建缓冲输入流BufferedInputStream时,一个输入缓冲区数组被创建,来自流的数据填入缓冲区,一次可填入许多字节。3.3.2过滤流-缓冲流323.3.2过滤流-缓冲流输出流缓冲区write()输入流缓冲区read()33缓冲输入流:BufferedInputStream构造方法:BufferedInputStream(InputStreamin)

创建BufferedInputStream流对象,并创建一个内部缓冲区数组来保存输入数据。BufferedInputStream(InputStreamin,intsize)

用指定的缓冲区大小size。例,创建一个缓冲输入流bis:FileInputStreamfis=newFileInputStream("stock.txt");BufferedInputStreambis=newBufferedInputStream(fis);34缓冲输出流:BufferedOutputStream构造方法:BufferedOutputStream(OutputStreamout)

创建缓冲输出流,写数据到参数指定的输出流,缓冲区设为缺省的512字节大小。BufferedOutputStream(OutputStreamout,intsize)

缓冲区设为指定的size字节大小。例,创建一个缓冲输出流bos:FileOutputStreamfos=newFileOutputStream("stock.txt");BufferedOutputStreambos=newBufferedOutputStream(fos);35importjava.io.*;classFibOut{publicstaticvoidmain(Stringargs[]){try{

FileOutputStreamfos=newFileOutputStream("c:\\fib.txt");

BufferedOutputStreambos=newBufferedOutputStream(fos);intcount=0,i=1,j=1;for(;count<20;count++){bos.write(i);intk=i+j;i=j;j=k;}bos.close();fos.close();}catch(Exceptione){}}}例:在C盘根目录下建立文件FIB.txt,存储Fibonacci数列的前20个数。结果是什么?

364.1字符流的基类:抽象类Reader和Writer

字符流的输入输出操作由这两个类的子类实现。

面向字符--16位。Reader读取方法:intread():从流中读入一个字符intread(char[]cbuf):将字符读入数组intread(char[]cbuf,intoff,intlen):将字符读入数组的某一部分4字符流37Reader其他方法:voidclose():关闭流voidmark(intpos):标记流中的当前位置booleanmarkSupported():判断此流是否支持标记和复位操作booleanready():判断是否准备读取此流voidreset():返回标记过的位置longskip(longn):跳过字符38Writer方法:voidwrite(char[]cbuf):字符数组中数据输出到流voidwrite(char[]cbuf,intoff,intlen):字符数组的某一部分数据输出到流voidwrite(intc):将单个字符输出到流voidwrite(Stringstr):将字符串输出到流voidwrite(Stringstr,intoff,intlen):将字符串的某一部分输出到流voidclose():关闭流voidflush():刷出缓冲中的字符39ReaderBufferedReaderLineNumberReaderCharArrayReaderInputStreamReaderFileReaderFilterReaderPushbackReaderPipedReaderStringReaderReader

4.2字符流类层次图40WriterBufferedWriterCharArrayWriterOutputStreamReaderFileWriterFilterWriterPipedWriterStirngWriterWriter4.2字符流类层次图411.用于文件I/OFileReader和FileWriter2.用于内存数组的流

CharArrayReader和CharArrayWriter3.用于字符串的流

StringReader和StringWriter4.用于管道的流

PipedReader和PipedWriter5.提高I/O效率的缓冲流

BufferedReader和BufferedWriter4.2字符流类层次图426.具有过滤功能的流

FilterReader和FilterWriter7.八位转十六位的流(只有16位字符流)InputStreamReader和OutputStreamWriter4.2字符流类层次图43

用来在字节流和字符流之间搭起一座"桥"

从字节输入流读入字节,并按编码规范转换为字符;往字节输出流写字符时,先将字符按编码规范转换为字节,再输出到字节输出流。4.3.1InputSteamReader/InputSteamWriter44InputSteamReader类构造方法如下:publicInputSteamReader(InputSteamin)publicInputSteamReader(InputSteamin,Stringenc)OutputStreamWriter类构造方法如下:publicOutputStreamWriter(OutputStreamout)publicOutputStreamWriter(OutputStreamout,Stringenc)4.3.1InputSteamReader/InputSteamWriter454.3.2FileReader/FileWriterFileReader类FileReader类的构造方法有:FileReader(Filefile)FileReader(StringfileName)FileWriter类FileWriter类的构造方法有:FileWriter(Filefile)FileWriter(StringfileName)InputSteamReader/InputSteamWriterFileReader/FileWriter的读取、写入方法呢?46例:使用FileWriter类输出字符。importjava.io.*;classFileWriterDemo{publicstaticvoidmain(Stringargs[]){FileWriterout=null;try{out=newFileWriter("FileWrite.txt");

System.out.println("Encoding:"+out.getEncoding());out.write("JavaProgramming.");out.close();}catch(IOExceptione){}}}程序运行结果如下:Encoding:GBKfilewriter.txt内容为:JavaProgramming.47BufferedReader和BufferedWriter:

缓冲字符流类,可提高字符流处理的效率。构造方法如下:publicBufferedReader(Readerin)publicBufferedReader(Readerin,intsz)publicBufferedWriter(Writerout)publicBufferedWriter(Writerout,intsz)其中in和out分别为字符流对象,sz为缓冲区大小。4.3.3BufferedReader/BufferedWriter48例:读顺序文本文件importjava.io.*;classBufferedReaderDemo{publicstaticvoidmain(Stringargs[]){try

{

FileReaderfr=newFileReader(args[0]);BufferedReaderbr=newBufferedReader(fr);

Strings;while((s=br.readLine())!=null)System.out.println(s);fr.close();//关闭流}catch(Exceptione){System.out.println("Exception:"+e);}}}49例:将键盘输入的字符存储到命令行参数指定的文件中importjava.io.*;publicclassReadKey{publicstaticvoidmain(Stringargs[]){Filef=newFile(args[0]);try{BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));PrintWriterpw=newPrintWriter(newFileWriter(f));Strings;System.out.println("请输入文本(Ctrl+z结束):

");while((s=br.readLine())!=null)pw.println(s);br.close();pw.close();}catch(IOExceptione){e.printStackTrace();}}}System.out.println("请输入文本(end结束):");while(!(s=br.readLine()).equals("end"))使用==不成功50RandomAccessFile它直接继承Object,并且同时实现了接口DataInput和DataOutput;

允许对文件内容同时完成读和写操作,并能跳到文件的任意地方。构造方法如下:RandomAccessFile(Filefile,Stringmode)RandomAccessFile(Stringname,Stringmode)

mode为访问文件的方式,有"r"或"rw"两种形式。例:RandomAccessFilerf=newRandomAccessFile("1.txt","rw");5随机访问文件流51常用方法有:publiclonggetFilePointer()throwsIOException

返回文件指针的当前字节位置。publicvoidseek(longpos)throwsIOException

将文件指针定位到一个绝对地址pos。pos参数指明相对于文件头的偏移量,地址0表示文件的开头。例:将文件rf的文件指针移到文件尾:

rf.seek(rf.length());publicintskipBytes(intn)throwsIOException

温馨提示

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

评论

0/150

提交评论