IO流介绍and字节流 -Java

一、引言

  • 我们以前是如何存储数据的?

变量、数组和集合不能永久化存储数据

  • 学习IO流的目的?
  1. 将数据写到文件中,实现数据永久化存储
  2. 读取文件中已经存在的数据

二、IO流概述与分类

在数据传输的过程中,是谁在读?是谁在写?这个参照物是谁?

        IO的数据传输,可以看作是一种数据的流动,按照流动的方向,以内存为参照物,进行读写操作。

        简单来说:内存在读,内存在写。

        输入流:硬盘 ——>内存

        输出流:内存——>硬盘

IO流的分类


 

IO流的使用场景

  • 如果操作的是纯文本文件,优先使用字符流

  • 如果操作的是图片、视频、音频等二进制文件,优先使用字节流

  • 如果不确定文件类型,优先使用字节流.字节流是万能的流

什么是纯文本文件?

   用windows记事本打开能读的懂的文件就是纯文本文件。

三、字节流   (读、写)

3.1 字节流数据

package com.itheima.output;

import java.io.FileOutputStream;
import java.io.IOException;

public class OutputDemo1 {
    public static void main(String[] args) throws IOException {
       //1.创建字节输出流的对象
            //注意点:如果文件不存在,会帮我们自动创建出来(但是apple文件夹需要自己创建)
            //      如果文件存在,会把文件清空
        FileOutputStream fos=new FileOutputStream("D:\\apple\\a.txt");

        //2.写数据     传递一个整数时,那么实际写到文件中都是整数在码表中对应的字符
        fos.write(98);

        //3.释放资源    告诉操作系统,我现在已经不要再用那个文件了
        fos.close();

    }
}

3.2字节流写数据的三种方式

package com.itheima.output;

import java.io.FileOutputStream;
import java.io.IOException;

public class OutputDemo2 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos=new FileOutputStream("file_io\\a.txt");
       /* byte [] bys={97,98,99};
        fos.write(bys);
*/
        byte[] bys={97,98,99,100,101,102,103};
        fos.write(bys,1,2);//从此数组的1索引开始,长度为2

        fos.close();
    }
}

3.3字节流写数据的两个小问题

换行:fos.write("\r\n".getBytes());

3.4字节流写数据加异常处理

异常处理格式:try-catch-fianlly

package com.itheima.output;

import java.io.FileOutputStream;
import java.io.IOException;

public class OutputDemo3 {
    public static void main(String[] args) {
        FileOutputStream fos=null;
        try{
            fos=new FileOutputStream("D:\\a.txt");
            fos.write(97);
        }catch (IOException e){
            e.printStackTrace();
        }finally {//finally语句里面的代码一定会被执行
            if(fos!=null){
                try{
                    fos.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

3.5字节流数据

示例代码:

package com.itheima.output;

import java.io.FileInputStream;
import java.io.IOException;

public class InputDemo1 {
    public static void main(String[] args) throws IOException {

        //创建字节输入流对象
        FileInputStream fis=new FileInputStream("file_io\\a.txt");

        //字节流读数据
        int b;
        while((b=fis.read())!=-1){
            //读取字节时,返回值是本次读到的那个字节数据
            //也就是字符在码表中对应的那个数字
            //如果我们想要看到的是字符数据,那么一定要强转成char
            System.out.println((char)b);
        }

        //释放资源
        fis.close();
    }
}

四、案例应用

4.1 案例一:字节流复制文件

package com.itheima.output;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class test1 {
    public static void main(String[] args) throws IOException {
        //创建字节输入流,准备读数据
        FileInputStream fis=new FileInputStream("D:\\apple\\a.txt");
        //创建字节输出流,准备写数据
        FileOutputStream fos=new FileOutputStream("file_io\\b.txt");

        int b;
        while((b=fis.read())!=-1){
            fos.write(b);
        }

        fis.close();
        fos.close();
    }
}

4.2 案例二:定义小数组拷贝(对案例一进行优化)

package com.itheima.output;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

//对案例:test1进行优化,提高效率,定义小数组拷贝

public class test2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("D:\\apple\\a.txt");
        FileOutputStream fos=new FileOutputStream("file_io\\b.txt");

        byte [] bys=new byte[1024];
        int len;//本次读到的有效字节个数----这次读了几个字节

        while((len=fis.read(bys))!=-1){
            fos.write(bys,0,len);
        }

        fis.close();
        fos.close();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值