IO流详解(一)

一、Java流概述

文件通常是由一连串的字节或字符构成,组成文件的字节序列称为字节流,组成文件的字符序列称为字符流。Java中根据流的方向可以分为输入流和输出流。输入流是将文件或其他输入设备的数据加载到内存的过程;输出流恰恰相反,是将内存中的数据保存到文件或其他输出设备
大致关系如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、文件流

文件流主要包括:文件字节输入流,文件字节输出流,文件字符输入流,文件字符输出流。
1、FileInputStream(文件字节输入流)
FileInputStream主要按照字节方式读取文件,例如我们准备一个文件,该文件的名称为hhh01.txt
在这里插入图片描述

示例代码如下:

import java.io.*;

public class FileDemo01{

    public static void main(String[] args){
        InputStream fis = null;//父类引用指向子类
        try {
            fis = new FileInputStream("D:\\sp\\hhh01.txt");//实例化对象
            int b=0;
            while((b=fis.read())!=-1){
                //循环输出字符
                System.out.print((char)b);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

输出结果如下:

abcdefg

2、FileOutputStream(文件字节输出流)
FileOutputStream主要按照字节方式写文件,例如:我们做文件的复制,首先读取文件,读取后再将该文件另写一份保存到磁盘上,这就完成了备份。
在这里插入图片描述
示例代码如下:

import java.io.*;

public class FileDemo01{

    public static void main(String[] args) {
        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream("D:\\sp\\hhh01.txt");//自己自定义路径
            os = new FileOutputStream("D:\\sp\\hhh01.txt.bak");//也是自己自定义的
            int b = 0;
            while((b=is.read())!=-1){
                os.write(b);
            }
            System.out.println("文件复制完毕!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(os!=null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

输出结果:

文件复制完毕!

3、FileReader(文件字符输入流)
FileReader以字符为单位读取文件,也就是一次读取两个字节,如:
在这里插入图片描述
示例代码如下:

import java.io.*;

public class FileDemo01{

    public static void main(String[] args) {
       Reader r = null;
        try {
            r = new FileReader("D:\\sp\\hhh02.txt");
            int b = 0;
            while((b=r.read())!=-1){
                System.out.print((char)b);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            if(r!=null){
                try {
                    r.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

输出结果:

我是一名算法竞赛爱好者

因为采用了字符输入流读取文本文件,所以汉字就不会发生乱码。

三、缓冲流

Java缓冲流本身不具有IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。当对文件/其他目标频繁读写或操作效率低时,使用缓冲流能够高效地读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。
用法如下:

//测试类中
InputStream is = null;
OutputStream os = null;
is = new BufferedInputStream(new FileInputStream("d:\\test.txt"));
os = new BufferedOutputStream(new FileOutputStream("d:\\test.txt.bak"));

(-------------------------------------------分割线-------------------------------------------)

//测试类中
BufferedReader r = null;
BufferedWriter w = null;
r = new BufferrdReader(new FileReader("d:\\test.txt"));
w = new BufferedWriter(new FileWriter("d:\\test.txt.bak"));
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值