Java 文件IO 缓冲流操作,用缓冲流进行文件复制

java基础(jdk1.8)

**

文件IO——缓冲流

**

缓冲流即为了提高效率产生的缓冲层。字节流字符流都有对应的缓冲流。

	将字节先写入缓冲区,提高效率
    
    缓冲流使用步骤同转换流,不过是字节缓冲流对应字节流,字符缓冲流对应字符流    

字节缓冲流

  • BufferedInputStream 缓冲输入流
  • BufferedOutputStream 缓冲输出流

父类: InputStream OutputStream

构造方法

BufferedInputStream(InputStream)

BufferedOutputStream(OutputStream)

    //使用缓冲流输出,向文件内写入内容
    FileOutputStream fo = null;
    BufferedOutputStream bo = null;
    fo = new FileOutputStream("d://a.txt");
    bo = new BufferedOutputStream(fo);
    bo.write(97);
    bo.close();


    //使用缓冲流输入,读取文件内容
    FileInputStream fi = null;
    BufferedInputStream bi = null;
    fi = new FileInputStream("d://a.txt");
    bi = new BufferedInputStream(fi);
    System.out.println((char) bi.read());
    bi.close();

注意:

System.in 就是 BufferedInputStream的对象

也就是说我们平时用的Scanner输入就是使用字节缓冲输入流来读取的

字符缓冲流

  • BufferedReader 缓冲输入流
  • BufferedWriter 缓冲输出流

父类: Reader Writer

构造方法

BufferedReader(Reader)

BufferedWriter(Writer)

方法

相较于字符流里其他流的区别

:多了一个

  • newLine() //写入一个换行

    和操作系统相关联,window的换行为\r\n,linux为\n

:多了一个

  • readLine() //读一行 返回String类型

    读取完 返回null,读行不读取换行符

    //使用缓冲流输出,向文件内写入内容
    FileWriter fw = new FileWriter("d:\\a.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(98);
    bw.newLine();
	//同样需要使用flush进行刷新
    bw.flush();
    bw.write(97);
    bw.newLine();
    bw.flush();
    bw.close();


    //使用缓冲流输入,读取文件内容
    FileReader fr = new FileReader("d:\\a.txt");
    BufferedReader br = new BufferedReader(fr);
    String str = null;
    while ((str = br.readLine()) != null)
    {
        System.out.println(str);
    }

缓冲流复制文件

try {
    //将MySQL.pdf从D盘下MySQL下复制到d盘下并更名为MySQL入门.pdf
    fi =  new FileInputStream("D:\\MySQL\\MySQL.pdf");
    bi = new BufferedInputStream(fi);
    fo = new FileOutputStream("D:\\MySQL入门.pdf");
    bo = new BufferedOutputStream(fo);
    int len;
    byte [] bytes = new byte[1024*50];
    while ((len = bi.read(bytes)) != -1)
    {
        bo.write(bytes,0,len);
    }
} catch (IOException e) {
    e.printStackTrace();
}finally {
    if (bi != null)
    {
        try {
            bi.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    if (bo != null){
        try {
            bo.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 缓冲字符流用法差不多

  • 文件较大的情况,使用字节缓冲流进行复制的话速度会比较快

有兴趣的关注我的公众号,一起学习交流啊
在这里插入图片描述

上一篇 》转换流


下一篇 》序列化和反序列化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值