【205天】黑马程序员27天视频学习笔记【Day20-上】

叨逼叨两句

快了快了~快乐快乐~

20-01:IO流概述及分类

概念

  1. IO流用来处理设备之间的数据传输

  2. Java对数据的操作是通过流的方式

  3. Java用于操作流的类都在IO包中

  4. 流按流向分为:输入流和输出流。

  5. 流按操作类型分为:

    1. 字节流:字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的。

    2. 字符流:字符流只能操作纯字符数据,比较方便。

IO流常用父类

  1. 字节流的抽象父类

    1. InputStream

    2. OutputStream

  2. 字符流的抽象父类

    1. Reader

    2. Writer

  3. IO程序书写

    1. 使用前,导入IO包中的类

    2. 使用时,进行IO异常处理【IO流处理的是内存和硬盘之间数据的传输,硬盘有可能没有指定的文件】

    3. 使用后,释放资源

20-(02-03):FileInputStream

  1. 文件的结束标记是-1

  2. read()一次读取一个字节,却返回int类型。

读取文件

package com.test.demo001;

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

public class Demo009 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("yyy.txt");
        int a;
        while((a = fis.read())!=-1){
            System.out.println(a);   //读取出来的是码表值
        }
        fis.close();
    }
}

为什么read()方法返回值是int

因为字节输入流可以操作任意类型的文件,比如音频和视频等,这些文件底层都是以二进制形式进行存储的,如果每次读取都返回byte,有可能读到中间时遇到11111111,这11111111是byte类型中的-1,由于Java程序遇到-1就会停止不读了,所有后面的数据就读不到了,所以在读取时,用int类型接收,如果是11111111会在其前面补上24个0凑足4个字节,那么byte类型的-1就变成int类型的255了,这样可以保证整个数据读完,而结束标记的-1就是int类型。【文件用write写入时,也会去掉前面的3个8位,确保数据的完整性】

20-(04-05):FileOutputStream

  1. write方法虽然写出的是一个int数,但是文件上存入的会是去掉前3个8位的byte数。

package com.test.demo001;

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

public class Demo009 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("cccccc.txt");//创建输出流对象,如果没有指定文件就创建一个
        fos.write(97);  //虽然写出的是一个int数,但是文件上存入的会是去掉前3个8位的byte数
        fos.write(98);
        fos.write(99);
        fos.close();
    }
}
  1. 创建输出流对象时,如果没有指定文件就创建一个,如果有就清空那个文件的内容。

  2. 如果想要不清空内容直接续写,按下面的方法写:

FileOutputStream fos = new FileOutputStream("yyy.txt",true);

fos.write(97);
fos.write(98);

20-(06-10):拷贝

拷贝的三种方法

  1. 逐个字节拷贝【效率太低,开发不推荐】

    package com.test.demo001;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Demo009 {
        public static void main(String[] args) throws IOException{
            FileInputStream fis = new FileInputStream("20.19_day20总结.avi");
            FileOutputStream fos = new FileOutputStream("test.avi");
            int a;
            while((a = fis.read())!= -1){
                fos.write(a);
            }
            fis.close();
            fos.close();
            
        }
    }
    
  2. 打包拷贝【容易内存溢出,开发不推荐】

        package com.test.demo001;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Demo009 {
        public static void main(String[] args) throws IOException{
            FileInputStream fis = new FileInputStream("20.19_day20总结.avi");
            FileOutputStream fos = new FileOutputStream("test.avi");
    //        int a;
    //        while((a = fis.read())!= -1){
    //            fos.write(a);
    //        }
            
            byte[] arr = new byte[fis.available()];
            fis.read(arr);
            fos.write(arr);
            
            fis.close();
            fos.close();
            
        }
    }
  3. 定义小数组拷贝【开发推荐】

一般形式

package com.test.demo001;

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

public class Demo009 {
    public static void main(String[] args) throws IOException{
        FileInputStream fis = new FileInputStream("cccccc.txt");
        FileOutputStream fos = new FileOutputStream("bbbbbb.txt");
        byte[] arr = new byte[2];
        int len; //读到的有效字符个数
        while((len = fis.read(arr))!= -1){
            fos.write(arr,0,len);
        }
        fis.close();
        fos.close();
    }
}

标准格式

package com.test.demo001;

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

public class Demo009 {
    public static void main(String[] args) throws IOException{
        FileInputStream fis = new FileInputStream("cccccc.txt");
        FileOutputStream fos = new FileOutputStream("bbbbbb.txt");
        byte[] arr = new byte[1024 * 8];
        int len; //读到的有效字符个数
        while((len = fis.read(arr))!= -1){
            fos.write(arr,0,len);
        }
        fis.close();
        fos.close();
    }
}

拷贝原理图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值