IO流简单学习知识点

来源:互联网 发布:文本数据挖掘 编辑:程序博客网 时间:2024/06/05 16:37

     流是一组有顺序的,有起点和终点的字节/字符集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

输入input 文件——》程序======输入流

输出output 文件《——程序======输出流
站在程序角度来看是输出还是输入

一、IO的分类

    按照数据单位分类:

    字节流(8bit 传输视频、图片)


    字符流(16bit  传输文本文件

    按照角色分类:

        1.节点流:直接操作文件的流

        2.处理流:将传输进行操作处理,可作用于处理流和节点流上




2.IO的体系

抽象基类 :
                              InputStream             OutputStream              Reader                Writer

      

1.Java的IO流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的。
2.由这四个类派生出来的子类名称都是以其父类名作为子类名后缀
三、File 类

  • java.io.File类:文件和目录路径名的抽象表示形式,与平台无关
  • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
  • File对象可以作为参数传递给流的构造函数

File类构造方法

     1.public File(String pathname)

      以pathname为路径创建File对象

     2.public File(String parent,String child)

      以parent为父路径,child为子路径创建File对象

     3.注意:File的静态属性String separator存储了当前系统的路径分隔符。
                  在UNIX中,此字段为‘/’,在Windows中,为‘\\’
File类常见的方法


IO流传输文件的demo

package org.jcq.main;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test {/** * 使用IO流的节点流和处理流进行复制 1.创建File类实例,src是源文件路径,dest是目标传输文件路径(这个文件是没有的) * 2.将File实例做为FileInputStream或者FileOutputStream处理流的形参,因为效率问题,非文本文件使用FileInputStream和FileOutputStream * 3.创建缓冲流BufferInputStream 4.进行方法调用,并操作 5.清空缓冲留flush 6.关闭IO流 */public void testCopy(String src, String dest) {// 创建File实例File fs = new File(src);File fd = new File(dest);// 创建节点流FileInputStream fis= null;FileOutputStream fos = null;// 创建处理流BufferedInputStream bis = null;BufferedOutputStream bos = null;try {fis = new FileInputStream(fs);fos = new FileOutputStream(fd);bis = new BufferedInputStream(fis);bos = new BufferedOutputStream(fos);//调用方法,设置字节数组,设置字节数组每次装多少个字节(通过返回值查看是否全部读取完)byte [] b=new byte[20];int len;while((len=bis.read(b))!=-1) {//不等于-1则说明未读取完bos.write(b, 0, len);//b写入字节,0从头开始写入,len每次循环写入多少字节}bos.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {//为了防止空指针问题,先进行判空if(bis!=null) {bis.close();}if(bos!=null) {bos.close();}} catch (IOException e) {e.printStackTrace();}}}}

四、套路说明

步骤:

1、创建File的对象,指明路径,
2、创建FileInputStream对象,即节点流

4、创建BufferInputStream对象,构造器参数为FileInputStream对象,即处理流
3、调用BufferInputStreamBufferOutputStream对象的方法

/*read() :读取一个字节,当执行到文件结尾返回-1

*read(byte [ ]):读取一段字节,然后返回该段byte的字节长度,若未读取到字节,即到文档末尾,则返回-1

如:一个字符串abcdef,byte[4]

第一次byte={a,b,c,d},第二次byte={e,f,c,d},第二次读取将第一次读取的byte[0]/byte[1]替换e/f

*/

4、关闭相应的流(无论报错与否,都要保证关闭)