IO流FileInputStream和FileOutputSteam的简单使用(Begin)

引言

本人大二计算机专业生,Java在b站大学的动力节点(对初学者非常友好)自学的,毕竟大学嘛,懂的都懂,不能依靠老师,还得自己来,在本章节内如中分享我自学IO流这章的的学习笔记,毕竟学习路上从不缺少经验的分享者,希望大家一键三连支持一下!!!!

学习IO流的基础知识(初学需看)

一、什么是IO流:(是硬件与内存之间的一个通道)
I :Input(硬件到内存的输入)
O:Output (从内存输出到硬件)

二、IO流的分类
按流的大小分类:1.字节流(单个字节传输的万能流,什么都能传输) 2:字符流:(以字符为单位传输的流,只能传输普通文本文件)
3。看到以"steam"结尾的都为字节流,以Reader/Writer 结尾的流都为字符流

三、四大家族的首领(abstract class)
java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流

java.io.Reader 字符输入流
java.io.Writer 字符输出流

四、所有流都实现了 java.io.Closeable 接口,都是可关闭的,都有close()方法,
毕竟一个流开启后使用,基于内存和硬件之间的通道,占用内存资源,用完之后要关闭

五、 所有输出流都实现了: java.io.Flushable 接口,都是可刷新的,都有flush()方法
养成一个好习惯,输出流最终输出之后,一定要记得flush()刷新一下,
这个刷新表示将管道中未完成输出的数据强制输出完成(清空管道!!)。

六、java.io 包下主要掌握的流有16个:
文件专属:
java.io.FileInputStream(重点)
java.io.FileOutputStream(重点)
java.io.FileReader
java.io.FileWriter

转换流 :(将字节流转化为字符流)
java.io.InputStreamReader
java.io.OutputStreamWriter

缓存流专属:
java.io.BufferedReader
java.io.BufferedWriter
java.io.BufferedInputStream
java.io.BufferedOutputStream

数据流专属:
java.io.DateInputStream
java.io.DateOutputSteam

标准输出流:
java.io.PrintWriter
java.io.PrintStream(重点)

对象专属流:
java.io.ObjectInputStream(重点)
java.io.ObjectOutputStream(重点)

这里有附图可帮助大家构造起IO这块的基本结构:
这里有附图可帮助大家构造起IO这块的基本结构:
废话不多说我们进入今天的主题:FileInputStream和FileOutputSteam

测试代码加图片讲解

程序一:FileInputStream的主要内容

-----------------------------FileInputStream (字节读取流,万能流)
FileInputStream类读取文件:1.文件字节输入流,任何文件都可使用该流读。
2.字节方式:完成输入操作,硬盘——————>内存

3.利用while()循环以字节读文件内容:
int read()读取函数

  1. 中单个字节读太慢了
    可以使用 int read(byte [] b ) 以b.length 长度读取
    (注:read(byte [] b )的返回值不是具体的字节,而是读到的字节数量)
    (注2:read读到的东西都存入了byte[] b 数组之中)
    (注3:第二次调用read读到的后面的元素会将byte数组中前面的数组元素覆盖)
    例:文件内有:abcdef,第一次读到abcd,第二次读到ef 则数组内元素为:efcd

5.java 中文件路径默认路径为项目的根,也就是和src项目同级

6.利用java.lang.String类的 构造方法可将 字节数组--------> 字符串

7.主要利用的Sting构造方法为: new String(byte[] b, int began ,int end)
该方法指定位置转换成为String字符串,(注:不包括 end下标元素)

8.//int available();// 可以获取文件内的字节个数,配合byte数组可以直接一次性读完(仅适用于文本较少的)

import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamTest01 {
    public static void main(String[] args) {
        java.io.FileInputStream file=null;
        int countRead=0;
        byte[] bytes=new byte[4];
        try {
            file=new java.io.FileInputStream("TestIO03.txt");
            //file.available();// 可以获取文件内的字节个数,配合byte数组可以直接一次性读完(仅适用于文本较少的)
            //while()循环读到多少个就转化多少个
            while((countRead=file.read(bytes))!=-1){
                System.out.print(new String(bytes,0,countRead));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (file!=null){
                try {
                    file.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

在这里插入图片描述
在这里插入图片描述
实验结果:
在这里插入图片描述

程序2 :FileOutputSteam的主要内容

FileOutputStream :文件输出流(字节) 内存————————>硬盘
主要构造方法: 1.new FileOutputStream(String s) 如果调用该构造方法,当调用write()方法的时候,
是把文件内容清空,重写编写 !!!!(慎用!)
2.new FileOutputStream(String s,Boolean b) b为true则调用write()方法则是在文件内容后面追加写入内容
3.调用构造方法后,当文件不存在的时候会自动新建该文件!!!!!!
4。写完内容记得调用flush()方法,将管道清空

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class FileOutputStreamTest01 {
    public static void main(String[] args) {
        FileOutputStream fileOutputStream=null;
        try {
            fileOutputStream=new FileOutputStream("TestFileOut.txt",true);
            String s="我爱中国!!!!";
            fileOutputStream.write(s.getBytes());//调用write(byte[] b)方法将数据写入文件
            fileOutputStream.flush();// flush()清空管道
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileOutputStream!=null){
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

在这里插入图片描述

运行前:在这里插入图片描述
运行后:
在这里插入图片描述
在这里插入图片描述

自我总结:

新的知识点学习完后需要通过亲手敲代码,去实现一下,毕竟实践是检验真理的唯一标准,之后我也会更新IO流的其他内容放在JavaSE IO专栏中希望大家一键三连支持一下!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值