2021-4-8-8 IO流(尚585节开始)

IO流概念

input、output。什么是input、output可以去回顾一下冯诺依曼结构。

  • 其实就是内存和外存之间写入和写出就是一 个个“流”(说成数据流可能好理解一点)。
  • 也可以扩展成主机与主机之间通讯,你给我传输数据,我给你传输数据,也可以理解为一个个“流”。
  • 输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。(因为我们是以“内存”的角度是看的,对与“内存而言”,就是输入。当然,如果是以“外存”的角度,就是输出啦。主要是理解“输入”、“输出”是一个相对的概念)
  • 输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。
  • java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。

流的分类

  • 按操作数据单位不同分为:字节流(8bit)(图片、视频等等)、字符流(16bit)(操作文本文件.txt等等)
  • 按数据的流向不同分为:输入流、输出流(输入输出是相对的,主要看以谁为主体)
  • 按流的角色的不同分为:节点流、处理流
  • 节点流。一个文件,现在要把文件内容传输到内存中。直接将文件和内存连接起来,建立传输。这种就叫做节点流。打个比方就是,有一个水池,一个浴缸,直接将水池的水引流到浴缸,这种就是节点流。
    在这里插入图片描述
  • 处理流。在节点流的基础之上再包一层(也可以是包多几层),加快传输速度就是处理流(外面的这几层都叫做处理流)。
    在这里插入图片描述

java中的io类

  • 抽象基类
    在这里插入图片描述
    为什么是抽象?因为实际情况太复杂了,情况很多,具体实现就交给子类去完成,基类定义一些规范就行了。

  • 子类
    在这里插入图片描述

  • 后缀Stream→字节流,Reader/Writer→字符流

  • Output→输出流,Input→输入流

  • 除开4个抽象基类,节点流都包含File,剩余都是处理流。

  • 背景蓝色的都是重点

FileInputStream

//处理异常的方式是抛出
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileInputStreamTest<Text> {
    public static void main(String[] args) throws IOException {
        File file = new File("hello.txt");//这个路径是相对路径,是相对于我们的工程“javaSE”来说的
        System.out.println(file.getAbsoluteFile());//C:\Users\xxx\Desktop\javaSE\hello.txt

        File file1 = new File("io\\hello.txt");
        System.out.println(file1.getAbsoluteFile());//C:\Users\xxx\Desktop\javaSE\io\hello.txt


        /*
        将hello.txt的内容读入到程序(内存)中,然后输出到控制台
         */
        //1.实例化File类,指明要操作的对象
        File file2 = new File("Hello\\src\\io\\hello.txt");
        System.out.println(file2.getAbsoluteFile());//C:\Users\xxx\Desktop\javaSE\Hello\src\io\hello.txt

        //2.提供具体的流
        FileReader fr = new FileReader(file2);

        //3.数据的读入
        //read():返回读入的一个字符。如果达到文件末尾了,返回-1
        int data = fr.read();
        while(data != -1){
            System.out.print((char)data);
            data = fr.read();
        }

        //4.流的关闭操作
        fr.close();
    }

    /*
    @Text
    public void test(){
        File file = new File("hello.txt");//单元测试里面的路径是相较于当前module的
    }
    */

}
//处理异常的方式是捕获
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileInputStreamTest {
    public static void main(String[] args) {
        File file = new File("hello.txt");//这个路径是相对路径,是相对于我们的工程“javaSE”来说的
        System.out.println(file.getAbsoluteFile());//C:\Users\xxx\Desktop\javaSE\hello.txt

        File file1 = new File("io\\hello.txt");
        System.out.println(file1.getAbsoluteFile());//C:\Users\xxx\Desktop\javaSE\io\hello.txt

        /*
        将hello.txt的内容读入到程序(内存)中,然后输出到控制台
         */
        FileReader fr = null;
        try {
            //1.实例化File类,指明要操作的对象
            File file2 = new File("Hello\\src\\io\\hello.txt");
            System.out.println(file2.getAbsoluteFile());//C:\Users\xxx\Desktop\javaSE\Hello\src\io\hello.txt

            //2.提供具体的流
            fr = new FileReader(file2);//文件路径一定要对,否则会报FileNotFoundException

            //3.数据的读入
            //read():返回读入的一个字符。如果达到文件末尾了,返回-1

            /*方式一
            int data = fr.read();
            while(data != -1){
                System.out.print((char)data);
                data = fr.read();
            }
            */

            //方式二
            int data;
            while ((data = fr.read()) != -1){
                System.out.print((char)data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//为了保证资源一定可以关闭(有可能出现异常,如果直接抛出,就不会执行下面的代码,就不会关闭),使用finally
            //4.流的关闭操作
            try {
                if(fr!=null){ fr.close(); }//因为在fr实例化的时候有可能异常,也就是文件找不到,所有要加if判断
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    
    /*
    @Text
    public void test(){
        File file = new File("hello.txt");//单元测试里面的路径是相较于当前module的
    }
    */
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值