每周总结13

每周总结13

io

缩写。

Input:输入

Output:输出

计算机中,

1.输入就是往内存中装入硬盘上的数据。

数据传输方向。

Disk ----------------------> Memory Read;

这叫读入 read 读

memory 读 Disk 上的数据。

2.输出就是从内存中往硬盘上写数据,

Memory ----------> Disk Write.

叫做写 write.

3.读写

write and read. 读写的主体都是内存。内存读取硬盘中的数据,或者是内存往硬盘里面写入数据

客体都是硬盘。

像硬盘里面读,read,往硬盘里面写,write。

分类

按方向分: 输入输出流。

对象还是内存。输入内存是宾语客体,输出内存是主语主体。

内存读取数据。 往内存里存入,叫做输入,也称读 read. Input

内存取出数据。 从内存往外面拿,叫输出,也称写 write.Output.

输入输出(流),读取和写入。

按读取数据类型分。分为 字节流和字符流。

字节流每次读取一个字节,8bit 1byte.

字符流, 帮你包装好了。

每次读一个字符。

碰见英文 ‘a’ 就读一个字节。

碰见中文 “汉” 就读 2 byte。

自动识别,包装,可以中文英文一起读(其他语种可以吗?)

只要是文本文件还是可以的吧。

字节流可以读取任何形式的数据,如文本、音频、图像、视频等待。Everything.

而字符流。

只能读取纯文本形式的数据,也就是txt格式。

但是很方便快捷,效率高,因为相对比较单一。

以 Stream 结尾都是 字节流

​ Reader or或者 Writer 皆是 字符流。

流的步骤

1.确定源

2.打开流

3.操作 (流?)

4.关闭流

流常搭配使用,Input 对应 Output;

输出流一定要刷新,即是调用flush()方法。

有异常要捕获。(不捕获会终止吗,系统异常不需要我们管理吧。还是自定义了异常吧。

没有,系统的异常也可以由我们捕获处理,这样就不会上抛到JVM导致系统停止运行了吧。)

抽象类

InputStream , and OutputStream 始祖。

常用

fileInputStream 对应 fileOutputStream 。

读写文件file.

InputStream f1 = new fileInputStream(String or file)

String类型的参数表示:文件的路径

file类型的参数表示: 一个文件对象。

String 直接写文件路径即可。应该是写了方法自动识别,索引找到了对应文件。

文件操作完毕后必须关闭,否则长期保持对文件的连接状态,造成内存溢出的现象发生。

File类的对象可以是一个文件,也可以是一个路径(即目录),可以是具体存在的文件,也可以是尚未存在的文件。

//文本文件拷贝案例。
package com.XGX.Test.IO;

import java.io.*;

public class IO {
    public static void main(String[] args){
        FileReader fr = null;
        FileWriter fw = null;
        try {
            //1.创建File类的对象,指明读入和写出的文件。
            File srcFile = new File("C:\\Users\\XGX\\Desktop\\Hello.txt");
            File destFile = new File("C:\\Users\\XGX\\Desktop\\Hello1.txt");
            //这里填的是文件的路径,存储路径。在文件属性中找到就可以了。

            //2.创建输入和输出流的对象。
            fr = new FileReader(srcFile);//把之前已经指向你所指定文件的2个File类型的引用类型(指针)赋值过来。
            fw = new FileWriter(destFile);//1.这里可以否直接写文件路径呢?一定要绕一下File对象吗。
            //尝试了看来不行,他应该是没有这种传参方式,只能通过File类引用中间传输了。

            //3.数据的读入和写出操作
            char[] cbuf = new char[5];//字符数组
            int len;//记录每次读入到cbuf数组当中的字符的个数
            while ((  len = fr.read(cbuf)  ) != -1) {//什么意思
                //read方法
                //无参返回值是下一个字节的字节码,即默认读1byte。
                //有参的read方法返回的是读取的字节数。那就是每次读5个。
                //如果已经达到流的最后面就返回-1,即是不满足while循环条件终止操作。

                fw.write(cbuf, 0, len);

                //没有看懂这个中间参数0的意义是什么。
                //write参数格式好像同read
                //按照len长度进行读取。
                //那就是len存在设定上限 cbuf的5个char类型?
                System.out.print(cbuf);//读出并在控制台打印。
                //这里相当于操作成功的标识,实际操作可以省略,但是为了反馈提示故做此。
            }
        }catch(Exception e){
                e.printStackTrace();//是个异常就捕获了吧?然后打印某个相关信息。
            }finally{
            //4.关闭流资源
                try{//关闭的操作依旧是放在try语句块中进行
                    if(fw != null)
                        fw.close();//先关掉了输出流。
                }catch(IOException e){//Exception的子类异常。
                    e.printStackTrace();
                }finally{
                    try{
                        if(fr != null)
                            fr.close();//然后再关掉输入流。重置到指向null.
                    }catch(IOException e){
                        e.printStackTrace();//关闭完成,无需finally了。
                    }
                }
            }
        }
    }

/*
java中操作流的基本过程可以总结为以下4个步骤:
1.声明流对象的引用变量,附初始值null;
2.在try代码块中完成对输入、输出流的操作。
3.在catch代码块中对可能抛出的异常进行捕获处理。
4.在finally代码块中关闭输入输出流,甘比流的操作也需要在try-catch代码块中书写。
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值