Java IO流

来源:互联网 发布:进口数据 编辑:程序博客网 时间:2024/06/06 19:54
Source------->read--------->program------>write------->dest


流的分类: 
    按流的方向:
         输入流:InputStream和Reader
         输出流:OutputStream和Writer
    按处理数据大小:
         字符流:InputStream和OutputStream
         字节流:Reader和Writer
    按功能:
         节点流:以上的都可以归为节点流,
         处理流:在节点流的基础上对它进行处理。BufferedInputStream

所有IO操作都由以下步骤构成:
  建立流、操作流、关闭流。
文件类File
File的构造方法有
public File(String pathname)创建一个与指定路径有关的File对象。
File类的方法:
   
 booleancanExecute() 
          测试应用程序是否可以执行此抽象路径名表示的文件。 booleancanRead() 
          测试应用程序是否可以读取此抽象路径名表示的文件。 booleancanWrite() 
          测试应用程序是否可以修改此抽象路径名表示的文件。 intcompareTo(File pathname) 
          按字母顺序比较两个抽象路径名。 booleancreateNewFile() 
          当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。staticFilecreateTempFile(String prefix, String suffix) 
          在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。staticFilecreateTempFile(String prefix, String suffix, File directory) 
           在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 booleandelete() 
          删除此抽象路径名表示的文件或目录。 voiddeleteOnExit() 
          在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 booleanequals(Object obj) 
          测试此抽象路径名与给定对象是否相等。 booleanexists() 
          测试此抽象路径名表示的文件或目录是否存在。 FilegetAbsoluteFile() 
          返回此抽象路径名的绝对路径名形式。 StringgetAbsolutePath() 
          返回此抽象路径名的绝对路径名字符串。 FilegetCanonicalFile() 
          返回此抽象路径名的规范形式。 StringgetCanonicalPath() 
          返回此抽象路径名的规范路径名字符串。 longgetFreeSpace() 
          返回此抽象路径名指定的分区中未分配的字节数。 StringgetName() 
          返回由此抽象路径名表示的文件或目录的名称。 StringgetParent() 
          返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null FilegetParentFile() 
          返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null StringgetPath() 
          将此抽象路径名转换为一个路径名字符串。
      测试此抽象路径名是否为绝对路径名。 booleanisDirectory() 
          测试此抽象路径名表示的文件是否是一个目录。 booleanisFile() 
          测试此抽象路径名表示的文件是否是一个标准文件。
  测试此抽象路径名指定的文件是否是一个隐藏文件。 longlastModified() 
          返回此抽象路径名表示的文件最后一次被修改的时间。 longlength() 
          返回由此抽象路径名表示的文件的长度。 String[]list() 
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 booleanmkdir() 
          创建此抽象路径名指定的目录。 booleanmkdirs()  StringtoString() 
          返回此抽象路径名的路径名字符串。File类有两个常量:separator,和separatorChar用来返回操作系统平台有关的文件分隔符。
我们在程序中应该采用这样的编程风格:
 “c:”+File.separator+"input.txt";

字节流:



低级字节流:
  对二进制文件进行读写操作:FileInputStream、FileOutputStream数据源是磁盘文件
 对内存缓冲区中的字节数组进行读写操作:ByteArrayInputStream和ByteArrayOutputStream数据源是内存中的字节数组
 对线程管道进行读写操作:PipedInputStream和PipedOutStream类,数据源是线程管道。
高级字节流:
  过滤流类:提供额外功能,在将数据实际写入到输入流之前对输出进行预处理。或者在读取数据之后对输入进行后期处理。过滤流类都是抽象类FilterInoutStream和FilterOutputStream的子类。
       缓冲流:BufferedInputStream和BufferedOutputStream,实现了带缓冲的过滤流
       数据流:DataInputStream和DataOutputStream,可以用与计算机无关的格式读写
       计数:LineNumberInputStream类,允许在翻译行结束符的基础上,维护一个计数器该计数器表明正在读取的是哪一行
       推回输入流:PushbackInputStream类表示一个流允许从流中读取数据,然后在需要时推回该流。
       打印输出流:PrintStream类,允许将基本类型数据打印输出到字符串流中,带有自动刷新功能。
  对象流:
       包括ObjectInputStream和ObjectOutputStream允许直接对对象执行读写操作。
  合并:
       SequenceInputStream类可以实现两个文件的合并操作。

  1)字节缓冲流:  
      BufferedInputStream和BufferedOutputStream为字节流对象增加缓冲区功能。
因此创建它们需要首先创建字节流对象。
建议最后使用flush()将缓冲区中的数据全部写出目的流中,
FileInputStream(File file)

          通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String name)

          通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定
 2)数据流:
DataInputStream和DataOutputStream,可以用与计算机无关的格式读写Java的基本数据类型以及String对象。经过它们过滤就可以读写各种基本数据类型和字符串了。
 3)字节打印输出流
字符流:

Reader与InputStream相似,用于从流中读取数据。
Reader的方法:
  int read() 读取一个字符,并将其返回,读到末尾返回-1
Writer与OutputStream相似,用于向流中写入数据。
Writer的方法
void writer(int c) 将参数c的低16位组成的字符写入流中,
void writer(char[]buffer)将字符数组buffer中的字符写入流中
void flush() 刷新该输出流,并强制写出所有缓冲输出字节。
   低级字符流:
  对内存数组进行操作:CharArrayReader和CharArrayWriter,数据源为内存中的字符数组。
对内存中的String对象进行操作:StringReader和StringWriter,数据源为内存中的String对象
对线程管道进行操作:PipedReader和PipedWriter其数据源为线程管道
对文本进行读写操作:FileReader和FileWriter,数据源为磁盘文件。
高级字符流:
缓冲流:BufferedReader和BufferedWriter
转换流:用于字节数据到字符数据的转换 InputStreamReader和OutputStreamWriter
打印输出流:PrintWriter运行将基本数据类型数据打印输出到字符串流中自带Flush功能。


缓冲流
BufferedReader类提供了readLine()方法,可以一次读入一行字符。以字符串形式返回。如果独到文件末尾返回null,它提供了newLine方法,写入一个行分隔符。
转换流
InputStreamReader用于将一个字节流中的字节转换为字符。OutputStreamWriter用于将写入的字符转换成字节后写入字节流。
对象流:
最高级的也是最自然的读写是基于对象的读写。由ObjectInputStream、ObjectOutputStream提供。他俩之所以能够完成基于对象的读写,是因为Java提供了一套对象序列化机制。
序列化机制:就是一套向流写入或读取对象数据的自动机制。这套机制将读写的实现封装在对象自身的实现中。
对象要想通过ObjectInputStream或者ObjectOutputStream进行读写,必须要让它的类实现java.io.Serializable 接口。

Serializable接口没有定义任何方法,它是一种标记接口。这种类型的接口仅仅用于标示它的实现类特征。
要想对象的某个属性不被序列化需要用transient来修饰。
实现了Serializable接口的类可以被序列化输出。
不能被序列化输出的有:static属性、方法、加了transient修饰的属性。

0 0