java进阶-第十一讲 IO

java进阶-第十一讲 IO

1 什么IO

IO:
	Input:输入。
	Output:输出。
计算机中,什么是输入?什么是输出?
	计算机中:
		输入的概念是往内存中读入硬盘上的数据,这叫读 read
		输出的概念是从内存中往硬盘上写数据,这叫做写 write
	怎么理解:
		我们人就相当于一台电脑,
		读:读书,是不是将书上(硬盘)的内容读入到大脑(内存)中,这叫做输入
		写:写文章,是不是将大脑中(内存)的知识写到纸上(硬盘),这叫做输出

在这里插入图片描述

2 流的分类

流按照方向分为两种:输入流、输出流,
输入流指的是:往内存中存入数据,叫做输入,也叫作读,Inputxxx
输出流指的是:从内存中往外取数据,叫做输出,也叫作写,Outputxxx

按照读取数据的类型来分,分为:字节流和字符流两种
什么是字节流:每次读取一个字节,8bit -- 1Byte
什么是字符流:每次读取一个字符。比如"a曹操",读取的时候一次读取一个字符
先读取'a',然后读取'曹',汉字在windows中存储是两个字节,'a'在windows中占1个字节
使用字符流读取的时候,他会帮你包装好,一次读到的就是一个字符。

区别:
	字节流可以读取任何形式的数据:包括文本、音频、图像、视频等等
	字符流只能读取纯文本形式的数据,也就是txt格式的数据。

字节流有哪些:
	以后你们只要看到以Stream结尾的都是字节流,比如InputStream,OutputStream
	FileInputStream/FileOutputStream
	BufferedInputStream/BufferedOutputStream
字符流有哪些:
	以后你们只要看到以Reader或者是Writer结尾的都是字符流。
	Reader/Writer
	InputStreamReader/OutputStreamWriter
问:如果要读取图片,用什么流?字节流

“a中国我爱你”
如果用字节流读的话,每次只能读一个字节,1Byte。
第一次读 ‘a’
第二次读 只能读中字的一半

如果用字符流,第一次读 'a' 第二次直接读'中'
windows中,一个汉字占2个字节,一个英文字符栈1个字节

3 InputStream

InputStream: 输入流,字节输入流,往内存中读入数据
InputStream是一个抽象类,无法创建对象,所以,我们要使用它的子类。
这也是多态的应用,它的子类用得最多的是FileInputStream

往内存中读,要有哪些先决条件?
	1.先要有输入源。有了输入源才能往内存中读入数据。
	2.FileInputStream的输入源是什么东西?File文件,所以先要有文件
	 InputStream is = new FileInputStream(String或者File);
	 String类型的参数表示:文件的路径
	 File类型的参数表示:一个文件对象
	3.FileInputStream就是一个输入的管道,通过这个管道中的read方法将硬盘上的数据
		读入到内存中
流的步骤:
	1.确定源
	2.打开流
	3.操作
	4.关闭流

流一般情况下都是配套使用,也就是Input搭配一个Output
操作的步骤和上面一致
先打开的流后关闭
输出流一定要刷新,即调用flush()方法
有异常要捕获。

在这里插入图片描述

// 文件的拷贝
package com.tj.IO;

import java.io.*;

/**
 * @program: Study
 * @description:
 * @author: tianjie
 * @create: 2021-02-16 12:49
 */
public class IOTest02 {
    public static void main(String[] args) {

        // 1 确定源
        File srcFile = new File("/IdeaProjects/Study/src/com/tj/IO/IOTest01.java");
        File destFile = new File("/IdeaProjects/Study/src/com/tj/IO/IOTestcpy01.txt");
        FileInputStream fis = null;
        FileOutputStream fos = null;
        // 2 打开流
        try {
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);
            // 3 操作

            byte[] flush = new byte[4];

            //  3.1 read
            while (fis.read(flush) != -1) {
            //  3.2 write
                fos.write(flush);
                fos.flush();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != fos) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (null != fis) {
                try {
                    // 4 关闭流
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值