Java IO流

Source------->read--------->program------>write------->dest


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

所有IO操作都由以下步骤构成:
  建立流、操作流、关闭流。
文件类File
File的构造方法有
public File(String pathname)创建一个与指定路径有关的File对象。
File类的方法:
   
 boolean canExecute() 
          测试应用程序是否可以执行此抽象路径名表示的文件。
 boolean canRead() 
          测试应用程序是否可以读取此抽象路径名表示的文件。
 boolean canWrite() 
          测试应用程序是否可以修改此抽象路径名表示的文件。
 int compareTo(File pathname) 
          按字母顺序比较两个抽象路径名。
 boolean createNewFile() 
          当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
staticFile createTempFile(String prefix, String suffix) 
          在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
staticFile createTempFile(String prefix, String suffix, File directory) 
           在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
 boolean delete() 
          删除此抽象路径名表示的文件或目录。
 void deleteOnExit() 
          在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
 boolean equals(Object obj) 
          测试此抽象路径名与给定对象是否相等。
 boolean exists() 
          测试此抽象路径名表示的文件或目录是否存在。
 File getAbsoluteFile() 
          返回此抽象路径名的绝对路径名形式。
 String getAbsolutePath() 
          返回此抽象路径名的绝对路径名字符串。
 File getCanonicalFile() 
          返回此抽象路径名的规范形式。
 String getCanonicalPath() 
          返回此抽象路径名的规范路径名字符串。
 long getFreeSpace() 
          返回此抽象路径名指定的分区中未分配的字节数。
 String getName() 
          返回由此抽象路径名表示的文件或目录的名称。
 String getParent() 
          返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
 File getParentFile() 
          返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null
 String getPath() 
          将此抽象路径名转换为一个路径名字符串。

      测试此抽象路径名是否为绝对路径名。
 boolean isDirectory() 
          测试此抽象路径名表示的文件是否是一个目录。
 boolean isFile() 
          测试此抽象路径名表示的文件是否是一个标准文件。

  测试此抽象路径名指定的文件是否是一个隐藏文件。
 long lastModified() 
          返回此抽象路径名表示的文件最后一次被修改的时间。
 long length() 
          返回由此抽象路径名表示的文件的长度。
 String[] list() 
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
 boolean mkdir() 
          创建此抽象路径名指定的目录。
 boolean mkdirs() 
 String toString() 
          返回此抽象路径名的路径名字符串。
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修饰的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值