java Io programe summary.docx

上传人:b****7 文档编号:10726635 上传时间:2023-02-22 格式:DOCX 页数:23 大小:181.04KB
下载 相关 举报
java Io programe summary.docx_第1页
第1页 / 共23页
java Io programe summary.docx_第2页
第2页 / 共23页
java Io programe summary.docx_第3页
第3页 / 共23页
java Io programe summary.docx_第4页
第4页 / 共23页
java Io programe summary.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

java Io programe summary.docx

《java Io programe summary.docx》由会员分享,可在线阅读,更多相关《java Io programe summary.docx(23页珍藏版)》请在冰豆网上搜索。

java Io programe summary.docx

javaIoprogramesummary

目录

JAVAIOPROGRAMESUMARYDocumentRevisionHistory2

相关概念5

流6

文件6

I/O流概述6

I/O流的层次7

1.字节流:

7

2.字符流:

7

3.对象流(系列化)8

4.过滤流8

5.中间流8

6.管道流9

6.其它9

常用流介绍9

File9

文件的顺序处理10

随机访问文件(RandomAccessFile)10

InputStream11

OutputStream12

Reader12

Writer14

BufferedReader和BufferedWriter15

中间流(InputStreamReader和OutputStreamWriter)16

对象的串行化(Serialization)17

串行化的定义17

串行化方法18

I/O操作总结21

JavaIO的一般使用原则:

21

附录22

附录一(javaio设计模式分析)22

附录二(javaFileOperationinHTML)23

附录三(java读取配置文件的几种方法)23

附录四(Java中的异常)23

JAVAIOPROGRAMESUMARYDocumentRevisionHistory

Ver.No.

Ver.Date

PreparedBy

ReviewedBy

ApprovedBy

AffectedSection&SummaryofChange

1.0

November24,2010

Yangxueyong

InitialDraft

相关概念

流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。

类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。

这时候你就可以想象数据好像在这其中“流”动一样,如下图:

文件

File类:

提供定位本地文件系统、描述文件和目录的功能,是java.io包中引用实际磁盘文件的唯一对象。

I/O流概述

Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示。

并提JAVA.IO包(其中包括一些列类)来对输入/输出进行处理。

其他分类

底层流:

包含以字节的形式读写的方法

高层过滤器流:

用于读写高层信息(层流要求底层流作为基础)

I/O流的层次

1.字节流:

  从InputStream和OutputStream派生出来的一系列类。

这类流以字节(byte)为基本处理单位。

  ◇InputStream、OutputStream

  ◇FileInputStream、FileOutputStream

  ◇PipedInputStream、PipedOutputStream

  ◇ByteArrayInputStream、ByteArrayOutputStream

  ◇FilterInputStream、FilterOutputStream

  ◇DataInputStream、DataOutputStream

  ◇BufferedInputStream、BufferedOutputStream

2.字符流:

  从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位。

  ◇Reader、Writer

  ◇InputStreamReader、OutputStreamWriter

  ◇FileReader、FileWriter

  ◇CharArrayReader、CharArrayWriter

  ◇PipedReader、PipedWriter

  ◇FilterReader、FilterWriter

  ◇BufferedReader、BufferedWriter

  ◇StringReader、StringWriter

3.对象流(系列化)

  ◇ObjectInputStream、ObjectOutputStream

4.过滤流

  FilterInputStream(InputStreamin);

●BufferedInputStream

●DataInputStream

●LineNumberInputStream

●PushbackInputStream  

FilterOutputStream(OutputStreamout);

●BufferedOutputStream

●DataOutputStream

●PrintStream

5.中间流

●BufferedReader

●BufferedWriter

6.管道流

●PipedInputStream(PipedOutputStreamsrc);

●PipedOutputStream(PipedInputStreamsnk);

6.其它

  ◇文件处理:

  File、RandomAccessFile;

  ◇接口

  DataInput、DataOutput、ObjectInput、ObjectOutput;

常用流介绍

File

类File提供了一种与机器无关的方式来描述一个文件对象的属性。

下面我们介绍类File中提供的各种方法。

●文件或目录的生成

  publicFile(Stringpath);/*如果path是实际存在的路径,则该File对象

    /*表示的是目录;如果path是文件名,则该File对象表示的是文件。

*/

  publicFile(Stringpath,Stringname);//path是路径名,name是文件名

  publicFile(Filedir,Stringname);//dir是路径名,name是文件名

●文件名的处理

  StringgetName();//得到一个文件的名称(不包括路径)

  StringgetPath();//得到一个文件的路径名

  StringgetAbsolutePath();//得到一个文件的绝对路径名

  StringgetParent();//得到一个文件的上一级目录名

  StringrenameTo(FilenewName);//将当前文件名更名为给定文件的完整路径

●文件属性测试

  booleanexists();//测试当前File对象所指示的文件是否存在

  booleancanWrite();//测试当前文件是否可写

  booleancanRead();//测试当前文件是否可读

  booleanisFile();//测试当前文件是否是文件(不是目录)

  booleanisDirectory();//测试当前文件是否是目录

●普通文件信息和工具

  longlastModified();//得到文件最近一次修改的时间

  longlength();//得到文件的长度,以字节为单位

  booleandelete();//删除当前文件

●目录操作

  booleanmkdir();//根据当前对象生成一个由该对象指定的路径

  Stringlist();//列出当前目录下的文件

文件的顺序处理

  类FileInputStream和FileOutputStream用来进行文件I/O处理,由它们所提供的方法可以打开本地主机上的文件,并进行顺序的读/写。

例如,下列的语句段是顺序读取文件名为text的文件里的内容,并显示在控制台上面,直到文件结束为止。

  FileInputStreamfis;

  try{

    fis=newFileInputStream("text");

  System.out.print("contentoftextis:

");

     intb;

     while((b=fis.read())!

=-1)//顺序读取文件text里的内容并赋值

                    给整型变量b,直到文件结束为止。

     {             

       System.out.print((char)b);

     }

  }catch(FileNotFoundExceptione){

  System.out.println(e);

  }catch(IOExceptione){

  System.out.println(e);

  }

随机访问文件(RandomAccessFile)

  对于InputStream和OutputStream来说,它们的实例都是顺序访问流,也就是说,只能对文件进行顺序地读/写。

随机访问文件则允许对文件内容进行随机读/写。

在java中,类RandomAccessFile提供了随机访问文件的方法。

类RandomAccessFile的声明为:

publicclassRandomAccessFileextendsObjectimplementsDataInput,DataOutput

  接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数。

如:

readBoolean()、readInt()、readLine()、readFully()等。

  接口DataOutput中定义的方法主要是向流中写入基本类型的数据、或者写入一定长度的字节数组。

如:

writeChar()、writeDouble()、write()等。

下面详细介绍RandomAccessFile类中的方法。

 ◇构造方法:

  RandomAccessFile(Stringname,Stringmode);//name是文件名,mode

          //是打开方式,例如"r"表示只读,"rw"表示可读写,"

  RandomAccessFile(Filefile,Stringmode);//file是文件对象

 ◇文件指针的操作

  longgetFilePointer();//用于得到当前的文件指针

  voidseek(longpos);//用于移动文件指针到指定的位置

  intskipBytes(intn);//使文件指针向前移动指定的n个字节

InputStream

InputStream类的体系结构

FileInputStream

从实际磁盘文件读取数据

ByteArrayInputStream类

在字节数组中执行读写操作

StringBufferInputStream类

类似于ByteArrayInputStream,将字符串用作内部缓冲器

OutputStream

定义用于写入字节或字节数组的方法。

OutputStream类的体系结构

FileOutputStream类

创建文件(如果文件不存在),并将数据写入文件

ByteArrayOutputStream类:

在内存中创建缓冲器,toByteArray()和toString()方法用于数据检索

FilterOutputStream类

高层输出流

 Reader

Reader类是处理所有字符流输入类的父类。

Reader类的体系结构

FileReader

使读取字符文件成为可能

StringReader:

读取字符串的字符

CharArrayReader:

允许将字符数组用作输入

InputStreamReader:

从输入流读取字节,并将它们转换成字符

FilterReader:

允许读取过滤字符流

BufferedReader:

接受Reader对象为参数,并对其添加字符缓冲器

◇读取字符

  publicintread()throwsIOException;//读取一个字符,返回值为读取的字符

  publicintread(charcbuf[])throwsIOException;/*读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量*/

  publicabstractintread(charcbuf[],intoff,intlen)throwsIOException;

  /*读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现*/

◇标记流

  publicbooleanmarkSupported();//判断当前流是否支持做标记

  publicvoidmark(intreadAheadLimit)throwsIOException;

  //给当前流作标记,最多支持readAheadLimit个字符的回溯。

  publicvoidreset()throwsIOException;//将当前流重置到做标记处

◇关闭流

  publicabstractvoidclose()throwsIOException;

Writer

Writer类是处理所有字符流输出类的父类。

Writer类的体系结构

FileWriter:

允许将字符类型数据写入文件

CharArrayWriter:

允许将字符缓冲器用作输出流

PrintWriter:

包含一些使生成格式化输出变得很简单的方法

FilterWriter:

用于写入过滤字符流

BufferedWriter:

将数据缓冲到字符输出流

BufferedReader:

是Reader类的子类,为Reader对象添加字符缓冲器,为数据输入分配内存存储空间,存取数据更为有效。

◇向输出流写入字符

  publicvoidwrite(intc)throwsIOException;

  //将整型值c的低16位写入输出流

  publicvoidwrite(charcbuf[])throwsIOException;

  //将字符数组cbuf[]写入输出流

  publicabstractvoidwrite(charcbuf[],intoff,intlen)throwsIOException;

  //将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流

  publicvoidwrite(Stringstr)throwsIOException;

  //将字符串str中的字符写入输出流

  publicvoidwrite(Stringstr,intoff,intlen)throwsIOException;

  //将字符串str中从索引off开始处的len个字符写入输出流

◇flush()

  刷空输出流,并输出所有被缓存的字节。

  ◇关闭流

  publicabstractvoidclose()throwsIOException;

BufferedReader和BufferedWriter

 ◇生成流对象

  publicBufferedReader(Readerin);//使用缺省的缓冲区大小

  publicBufferedReader(Readerin,intsz);//sz为缓冲区的大小

  publicBufferedWriter(Writerout);

  publicBufferedWriter(Writerout,intsz);

 ◇读入/写出字符

  除了Reader和Writer中提供的基本的读写方法外,增加对整行字符的处理。

  publicStringreadLine()throwsIOException;//读一行字符

  publicvoidnewLine()throwsIOException;//写一行字符

【例4-4】

  importjava.io.*;

  publicclassNumberInput{

   publicstaticvoidmain(Stringargs[]){

    try{

      InputStreamReaderir;

      BufferedReaderin;

      ir=newInputStreamReader(System.in);

      //从键盘接收了一个字符串的输入,并创建了一个字符输入流的对象

      in=newBufferedReader(ir);

      Strings=in.readLine();

      //从输入流in中读入一行,并将读取的值赋值给字符串变量s

      System.out.println("Inputvalueis:

"+s);

      inti=Integer.parseInt(s);//转换成int型

      i*=2;

      System.out.println("Inputvaluechangedafterdoubled:

"+i);

    }catch(IOExceptione)

    {System.out.println(e);}

   }

  }

    运行结果

D:

\>javaNumberInput

123

Inputvalueis123

Inputvaluechangedafterdoubled:

246

  注意:

在读取字符流时,如果不是来自于本地的,比如说来自于网络上某处的与本地编码方式不同的机器,那么我们在构造输入流时就不能简单地使用本地缺省的编码方式,否则读出的字符就不正确;为了正确地读出异种机上的字符,我们应该使用下述方式构造输入流对象:

  

    ir=newInputStreamReader(is,"8859_1");

  采用ISO8859_1编码方式,这是一种映射到ASCII码的编码方式,可以在不同平台之间正确转换字符。

 

中间流(InputStreamReader和OutputStreamWriter)

  java.io包中用于处理字符流的最基本的类,用来在字节流和字符流之间作为中介。

  ◇生成流对象

  publicInputStreamReader(InputStreamin);

  /*in是字节流,而InputStreamReader是字符流,但是其来源是字节流in,

  因此InputStreamReader就可以把字节流in转换成字符流处理。

/*

  publicInputStreamReader(InputStreamin,Stringenc)throwsUnsupportedEncodingException;

  /*enc是编码方式,就是从字节流到字符流进行转换时所采用的编码方式,

   例如ISO8859-1,UTF-8,UTF-16等等*/

  publicOutputStreamWriter(OutputStreamout);

  /*out是字节流,而OutputStreamReader是字符流*/

  publicOutputStreamWriter(OutputStreamout,Stringenc)throwsUnsupportedEncodingException;//enc是编码方式

  InputStreamReader和OutputStreamWriter的方法:

  ◇读入和写出字符

  基本同Reader和Writer。

  ◇获取当前编码方式

  publicStringgetEncoding();

  ◇关闭流

  publicvoidclose()throwsIOException;

 

对象的串行化(Serialization)

串行化的定义

   1.什么是串行化

  对象的寿命通常随着生成该对象的程序的终止而终止。

有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。

我们把对象的这种能记录自己的状态以便将来再生的能力,叫做对象的持续性(persistence)。

对象通过写出描述自己状态的数值来记录自己,这个过程叫对象的串行化(Serialization)。

  2.串行化的目的

  串行化的目的是为java的运行环境提供一组特性,其主要任务是写出对象实例变量的数值。

串行化方法

  在java.io包中,接口Serializable用来作为实现对象串行化的工具,只有实现了Serializable的类的对象才可以被串行化。

 1.定义一个可串行化对象

  publicclassStudentimplementsSerializable{

    intid;//学号

    Stringname;//姓名

    intage;//年龄

    Stringdepartment//系别

    publicStudent(intid,Stringname,intage,Stringdepartment){

     this.id=id;

     this.name=name;

     this.age=age;

     this.department=department;

    }

  }

 2.构造对象的输入/输出流

  要串行化一个对象,必须与一定的对象输入/输出流联系起来,通过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢复。

  java.io包中,提供了ObjectInputStream和ObjectOutputStream将数据流功能扩展至可读写对象。

在ObjectInputStream中用readObject()方法可以直接读取一个对象,ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中。

  Studentstu=newStudent(981036,"LiuMing",18,"CSD");

  FileOutputStreamfo=newFileOutputStream("data.ser");

  //保存对象的状态

  ObjectOutputStreamso=newObjectOutputStream

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1