day_19 IO流

IO流

1.IO
    1.1 概述
        流:数据在两设备间的传输

    1.2分类
        按处理数据类型的不同分为:字节流和字符流
        按数据流向不同分为:输入流和输出流(相对于内存来说)
        按功能不同分为:节点流和处理流
            节点流:直接操作数据源
            处理流:对其他流进行处理

    1.3 四大抽象类
                        字节流          字符流
        输入流      InputStream         Reader
        输出流      OutputStream        Writer

    1.4文件流
        1.4.1 FileInputStream
            绝对位置:以系统根目录为准
            相对位置:./表示当前目录
                     ../表示上级目录
                     ../../表示上上级目录

            1. read使用

                读取一个字节,并返回对应的ASCII码值,返回为int型,读完了返回-1
                
                //创建字节输入流,在eclipse中,./定位当前项目,不是当前文件
                try{
                    FileInputStream fis = new FileInputStream("路径");
                    int data = 0;
                    while((data = fis.read()) != -1){
                        System.out.print((char)data);
                        //关闭资源
                        fis.close();
                    }
                }catch(IOException e){
                    e.printStackTrace();
                }

                FileInputStream fis = null;
                try{
                    fis = new FileInputStream("./src/day_19/123.txt");
                    int data = 0;
                    while((data = fis.read()) != -1){
                        System.out.println((char)data);
                    }
                }catch(IOException e){
                    e.printStackTrace();
                }finally{                       //关闭文件
                    try{
                        if(fis != null){
                            fis.close();
                        }
                    }catch(IOException e){
                        e.printStackTrace();
                    }
                }

                //现在 可以自动关闭资源
                try(FileInputStream fis = new FileInputStream("./src/day_19/123.txt");){
                    int data = 0;
                    while ((data = fis.read()) != -1){
                        System.out.println((char)data);
                    }
                }catch(IOException e){
                    e.printStackTrace();
                }

            2.read重载使用
                可以传递一个数组,一次读取会把该数组读满/读完,但后一次性返回
                返回int型, 相当于一个缓冲区,效率会提升
                
                try(……){
                    byte[] bytes = new bytep[20];
                    int temp = 0;
                    while(……){
                        //read返回的是档期那读取的元素个数,所以我们可以指定读多少,以防会出现数据重复
                        // 数组,起始位置,个数
                        System.out.println(new String(bytes,0,temp));
                    }
                }catch(){}

        1.4.2 FileReader
                一次性读取一个字符,也就是两个字节,主要用于读取纯文本文件,解决乱码问题

        1.4.3 FileOutputStream
            字节输出流,把数据写到指定文件中
            如果文件不存在会自动创建该文件,但不会创建目录(文件夹)

            //覆写写入,当创建该文件的输出流对象的时候,就会把该文件内容全部清除
            //创建对象时,传入第二个参数 true 说明时追加写入,不会清空该文件

        1.4.4 FileWriter
            新增了可以写出字符串的方法重载
                char[] chars = {'a','c'};
                fw.write(chars);

    1.5 缓冲流

                                字节流                      字符流
        文件输入流          BufferedInputStream         BufferedReader
        文件输出流          BufferedOutputStream        BufferedWriter

        1.5.1 BufferedReader
            //创建字符输入流
            //创建字符输入缓冲流对象
            String temp = null;
            while ((temp = br.readLine()) != null){
                System.out.println(temp);
            }

        1.5.2 BufferedWriter
            bw.write("");
            bw.write("");
            //刷缓存
            bw.flush();

    1.6 转换流
                    输入流                          输出流
                InputStreamReader           OutputStreamWriter

            将字节流转换为字符流

    1.7 打印流
        创建输出流,封装为打印流
        打印流默认打印到控制台
        更改打印流,打印到指定文件中: System.setOut(ps);

    1.8数据流
        必须保证顺序和类型一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值