Day 55

_IO流概述和分类

  1. IO:输入/输入(Input/Output)

  2. 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质就是数据的传输

  3. IO流就是用来处理设备间数据传输问题的

    • 常见的应用:文件复制;文件上传;文件下载
  4. IO流的分类:

    • 按照数据的流向
      • 输入流:读数据
      • 输出流:写数据
    • 按照数据类型来分
      • 字节流:字节输入流;字节输出流
      • 字符流:字符输入流;字符输出流
  5. 一般来说,我们说IO流的分类是按照数据类型来分的

  6. 如果数据通过Windows自带的记事本软件打开,我们还可以读懂里面的内容,就使用字符流,否则使用字节流。如果不知道该使用那种类型的流,就使用字节流。

字节流写数据

  1. 字节流抽象基类

    • InputStream:这个抽象类是表示字节输入流的所有类的超类
    • OutputStream:这个类是表示字节输出流的所有类的超类
    • 子类名特点:子类名称都是以其父类作为子类名的后缀
  2. FIleOutputStrea:文件输出流用于将数据写入File

    • FileOutputStream(String name):创建文件输出流以指定的名称写入文件
  3. 使用字节输出流写数据的步骤:

    • 创建字节流输出对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
    • 调用字节流输出对象的写数据方法
    • 释放资源(关闭此文件输出流并释放与此流相关的任何系统资源)
  4. package demo11;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class _IO_Demo_01 {
        public static void main(String[] args) throws IOException {
            // 创建字节流输出对象
            FileOutputStream fos = new FileOutputStream("C:\\Users\\Alvord\\Desktop\\markdown学习\\code\\studyProject\\src\\demo11\\note.txt");
            /*
               public void write(byte[] b)
               throws IOException      将 b.length字节从指定的字节数组写入此文件输出流。
             */
            fos.write(97);
            fos.write(98);
            fos.write(99);
            fos.write(100);
            /*
            做了三件事:
                1. 调用系统功能创建了文件
                2. 创建了字节输出流对象
                3. 让字节输出流对象指向创建好的文件
             */
            fos.close();   // IO流不要忘了.close()方法释放内存
        }
    }
    =====================================
    
    Process finished with exit code 0
    ********************************
    abcd
    

_字节流写输入的三种方式

  1. 方法名说明
    void write(int b)将指定的字节写入此文件输出流,一次写以一个字节数据
    void write(byte[] b)将 b.length 字节从指定的字节数组写入此文件输出流,一次写一个字节数组数据
    void write(byte[] b ,int off,int len)将 len 字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,一次写一个字节数组的部分数据
  2. package demo11;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class _IO_Demo_02 {
        public static void main(String[] args) throws IOException {
            /*
            void write(int b)                      将指定的字节写入此文件输出流,一次写以一个字节数据
            void write(byte[] b)                   将 b.length 字节从指定的字节数组写入此文件输出流,一次写一个字节数组数据
            void write(byte[] b ,int off,int len)  将 len 字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,
                                                   一次写一个字节数组的部分数据
             */
    
            FileOutputStream fos = new FileOutputStream("C:\\Users\\Alvord\\Desktop\\markdown学习\\code\\studyProject\\src\\demo11\\book.text");
    
            // void write(int b)        将指定的字节写入此文件输出流,一次写以一个字节数据
            fos.write(97);      // a
    
    
            //  void write(byte[] b)       将 b.length 字节从指定的字节数组写入此文件输出流,一次写一个字节数组数据
            byte[] b = {97,98,99,100,101,102};
            fos.write(b);         // abcdef
            /*
            重新写入时会覆盖原来文件中的内容
             */
    
            //  void write(byte[] b ,int off,int len)  将 len 字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,
            //                                         一次写一个字节数组的部分数据
            fos.write(b,1,3);    // bcd
    
            // String 类中的getBytes()方法
            byte[] bytes = "hijk".getBytes();
            fos.write(bytes);   // hijk
    
            fos.close();
        }
    }
    =====================================
    
    Process finished with exit code 0
    *************************************
    aabcdefbcdhijk
    

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

  1. 字节流写数据如何实现换行

    • windows: \r\n
        linux: \n
          mac: \r
      
  2. package demo11;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.charset.StandardCharsets;
    
    public class _IO_demo_03 {
        public static void main(String[] args) throws IOException {
            /*
            字节流写数据实现换行
            windows: \r\n
            linux: \n
            mac: \r
             */
    
            FileOutputStream fos = new FileOutputStream("C:\\Users\\Alvord\\Desktop\\markdown学习\\code\\studyProject\\src\\demo11\\note_03.txt");
            for (int i = 0; i < 5; i++) {
                byte[] bytes = "hello".getBytes();
                fos.write(bytes);
                fos.write("\r\n".getBytes());
            }
    
            fos.write("==========================".getBytes());
            fos.write("\r\n".getBytes());
            fos.close();
    
            /*
            字节流写数据如何实现追加写入
            public FileOutputStream(File file,  boolean append)
                     throws FileNotFoundException
            创建文件输出流以写入由指定的File对象表示的文件。
            如果第二个参数是true ,则字节将被写入文件的末尾而不是开头。
            创建一个新的FileDescriptor对象来表示此文件连接。
             */
    
            FileOutputStream fosAppend = new FileOutputStream("C:\\Users\\Alvord\\Desktop\\markdown学习\\code\\studyProject\\src\\demo11\\note_04.txt", true);
            for (int i = 0; i < 3; i++) {
                fosAppend.write("cyc love xx".getBytes());
                fosAppend.write("\r\n".getBytes());
            }
            fosAppend.close();
        }
    }
    ===================================
    
    Process finished with exit code 0
    ***********************************
    hello
    hello
    hello
    hello
    hello
    ==================================
    cyc love xx
    cyc love xx
    cyc love xx
    cyc love xx
    cyc love xx
    cyc love xx
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值