03 JAVA IO

java.io包中定义了多个流类型来实现输入输出功能,以不同的角度进行分类:

  按数据流的方向不同可以分为输入流和输出流

  按处理数据单位不通可以分为字节流和字符流

  按照功能不同可以分为节点流和处理流

 

所有流类型位于包java.io内都分别继承自一下四种抽象流类型

节点流可以从一个特定的数据源读写数据

处理流是“”连接“”在已存在的流之上,通过对数据的处理为程序提供更为强大的读写功能

InputStream

继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit)

下图中深色为节点流、浅色为处理流

OutputStream

继承自OutputStream的流都是用于程序中输入数据,且数据的单位为字节(8bit)

下图中深色为节点流、浅色为处理流

 

 

 

Reader

继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16bit)

下图中深色为节点流、浅色为处理流

 

Writer

继承自Writer的流都是用于程序中输入数据,且数据的单位为字符(16bit)

下图中深色为节点流、浅色为处理流

几个程序小例子来阐明具体用法:

FileInputStream和FileOutputStream用法

FileInputStream和FileOutputStream是字节流,只能单个字节传递,而汉字是双字节的,所以不能识别汉字

import java.io.*;


public class IOtest {

    public static void main(String[] args)
    {
        int b=0;
        FileInputStream in=null;
        FileOutputStream out=null;
        try {
            in=new FileInputStream("g:/1.txt");
            out=new FileOutputStream("g:/2.txt");
            while((b=in.read())!=-1)//in.read()不为-1说明还未访问完输入流
            {
                out.write(b);//按照字节写入
            }
            in.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
    }
}

 

FileReader和FileWriter用法

FileReader和FileWriter是字符流,可以传递汉字

import java.io.FileReader;
import java.io.FileWriter;


public class Reader_writer {

    public static void main(String[] args) {
        int c=0;
        FileReader fr=null;
        FileWriter fw=null;
        try {
            fr=new FileReader("g:/1.txt");
            fw=new FileWriter("g:/2.txt");
            while((c=fr.read())!=-1)
            {
                fw.write(c);
            }
            fr.close();
            fw.close();
        } catch (Exception e) {
    
        }
    }

}

BufferInputStream套接FileInputStream用法

import java.io.BufferedInputStream;
import java.io.FileInputStream;


public class BufferInputStream {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            FileInputStream fis=new FileInputStream("g:/1.txt");
            BufferedInputStream bis=new BufferedInputStream(fis);//对象流
            int c=0;
            System.out.println(bis.read());
            System.out.println(bis.read());
            bis.mark(0);//标记位置0
            for(int i=0;i<10&&(c=bis.read())!=-1;i++)
            {
                System.out.println((char)c+" ");
            }
 
            bis.reset();//回到标记位置,即位置0
            for(int i=0;i<10&&(c=bis.read())!=-1;i++)
            {
                System.out.println((char)c+" ");
            }
            bis.close();  
        } catch (Exception e) {
            // TODO: handle exception
        }
        
    }

}

 未完待续

posted @ 2017-10-10 21:05  四季信风  阅读(175)  评论(0编辑  收藏  举报