JAVA系列 IO流 知识结构整理 建立合理的知识框架逻辑 输入输出流 理顺你的思维架构Fileoutput inputStream FileWriter FIleReader结构整理

最近听见一首歌,个人创作时听见觉得挺好听的 先分享给大家https://music.163.com/#/song?id=41666363 それがあなたの幸せとしても (カバー)

切入正题 今天给大家介绍IO流,我只会介绍最基础的东西,因为我们都是按照考试的要求来复习的,太多的东西这里也讲不完,后续有新的东西我还会在这里追加我的更新即可。废话不多说直接切入正题。

File类

首先要给大家介绍的就是所有输入输出流的地基,file类,为什么说它是地基呢,因为就我个人而言的理解,file类是连接你的IDEA编程软件和你的桌面操作系统的一个link链接,通过它,你才能通过用你的编程软件 去操控你windows系统里的各种文件和其他东西,所以首先我们需要通过一个类,来创建这种联系。这种联系 很显然 就是我们的file类。

我们一般怎么使用呢,首先在使用前我要说明一点我开始初学的时候很容易搞错的一点。

一般情况在类的使用说明里面我们经常能看见这样的代码

public boolean canRead();
public boolean canWrite();
int read();
int read(byte b[]);

我一开始都没反应过来这个和类有什么关系,想了想发现,这些代码的意思是,你创建一个A类,这个类就自带这些方法。比如

//创建A类 A类包含上述方法。
A number1=new A();
boolean judge=A.canRead()//返回boolean类型
boolean judge1=A.canWrite();//boolean类型
int numbertest1=A.read();//返回int类型
byte arr[]=new byte[12];
int numbertest2=A.read(arr);//return int类型

我想各位看完上面这一串代码 就懂我想表达的意思了吧

好了 现在我们回过头来讲File类。如何创建File类呢

File f=new File("xxxxxxxxxxx")

xxxxxxxx就是路径 说起路径 我又想到了很多要说的东西。(为什么我要花那么多时间来说File类,因为File类是一切的地基,后面的类反而我不会多说什么。因为我有我自己的讲解风格,我是一个喜欢注重基础的人)

路径这个问题我实验过很多次,什么绝对路径,相对路径。我推荐大家写绝对路径,因为写相对路径的时候 我遇到过几个问题,现在给大家一一介绍这些问题

首先左边是我的项目结构,然后我使用相对路径去创建一个txt文件

创建成功了,但默认创建在了src文件夹外边

但是几天前在我没有升级IDEA的版本的时候,我想创建在src里面就用了如下所示的代码,虽然现在好像是创建成功了,但我之前可能因为版本问题,会提示操作错误,这样使用相对路径出现了问题。

但现在因为版本更新,好像是没有这个问题了,所以也无伤大雅,但是我还是推荐大家使用绝对路径来创建文件。

如图所示 这样就可以轻松的找到一个文件的绝对路径,方便我们编写程序,所以能用绝对路径是几乎不会出错的,不建议大家使用相对路径

文件字节输入流 输出流 //文件字符输入流 输出流//缓冲流 //FileInputStream FileOutputStream FileReader FileWriter BufferWriter BufferReader

这些东西我为什么要弄在一起呢??

因为我打算把他们揉在一起讲,因为很多就是包含关系,不应该是线性关系

而应该是类似树状一样的结构关系。

然后呢 后续我都会用英文来表示,因为我觉得中文反而显得很绕口,不如直接用编程字母来代表 更加直接美观。

首先 (当然也有BufferedInputStream和BufferedOutputStream,但是书上没有 考试也不考 各位了解一下即可 然后下面的BufferedReader Writer我打错字了 打成BufferReader Writer 先提醒一下)

以上两个图是我脑子里面的架构图

意思就是说 我对IO流的基础 就建立在这两张图上。这两个树状结构 彼此是平行关系

意思是同时存在两棵树 两棵树互不干扰 如果要详细点说明整个逻辑的话 我就再用这一张图来总结

PS:以上图片都是Viso所做(刚好最近IT检索课在教学 正好就用上了)

所以简单来说

File类是地基,然后我们可以给File类加技能点,比如现在有紫色技能点和红色技能点,加红色技能点就说明你在往FileInputStream和FileOutputStream方向成长(也就是字节流方向)

所以你看我们创建FileInputStream和FileOutputStream的时候是什么创建的?

\\这是第一种方法 在我眼里这是一种省略的写法
FileInputStream in=new FileInputStream("src\\letter.txt")//原谅我用了相对路径省时间

\\真正完全体的写法如下 完全体写法才能真正体现我所画的结构图
File file=new File("src\\letter.txt")
FileInputStream in1=new FileInputStream(file);

同学们 你们明白我要表达什么了吗 第一种是省略写法 省略写法能够省略很多步骤 但是体现不出来我想要表达的最重要的思想

第二种写法就能写出我想要表达的内容,由于File箭头指向了FileInputStream 能够形象地说明FileInputStream就是File类的铠甲,File穿在身上,才能发挥铠甲FileInputStream的用处,这样是不是很形象了? 所以第一种写法是不能够好好表达结构的 但是当我们熟悉了后 直接用第一种写法就好 可以省略编写代码的时间和量

File file=new File("src\\letter.txt")
FileInputStream in1=new FileInputStream(file);

好了 说完第一张图 我们来看第二张图

File类指向了FileReader FileWriter

(我们先不管FileReader Writer类有什么用 和刚才的字节流有什么区别)

那就说明FileReader类 和FileWriter类是File类的第二种铠甲,同样也必须是先有File类,才有铠甲类,就像必须先有骑士,然后铠甲才有用,这样才能发挥FileWriter和Reader的功能,其次我们看见FileReader和Writer指向了BufferReader和BufferWriter这样的缓冲流(你先不用知道缓冲流是什么)

那就说明BufferReader类和BufferWriter类需要套在FileReader和FileWriter上面,FileReader Writer又必须套在File类上面,就跟套娃一样。

简单点说 File是人

FileWriter(Reader)是铠甲

BufferReader(Writer)是铠甲上面的披风

一层层套娃下来 后面一个物体 必须依附前一个物体

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        File f=new File("src\\letter.txt");
        FileReader fileReader=new FileReader(f);
        FileWriter fileWriter=new FileWriter(f);
        BufferedReader bufferedReader=new BufferedReader(fileReader);
        BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
        //一层层套娃
    }
}

人有自己的专属技能(也就是file类的各种方法)

铠甲也有自己的专属技能(FileWriter Reader的各种类方法)

披风也有自己的专属技能(Buffer的各种类方法)

但是有个奇妙的地方就是 披风也能使用铠甲的技能

    import java.util.*;
    import java.io.*;
    public class Main {
        public static void main(String[] args) throws IOException {
            File f=new File("src\\letter.txt");
            FileReader fileReader=new FileReader(f);
            FileWriter fileWriter=new FileWriter(f);
            BufferedReader bufferedReader=new BufferedReader(fileReader);
            BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
            
            
            fileWriter.write("shit");//铠甲专属技能
            bufferedWriter.write("shit");//披风使用了铠甲的专属技能
            //但是铠甲使用不了披风的专属技能 只能向下兼容 不能向上兼容
            bufferedWriter.newLine();//披风专用技能
             
        }
    }

以上就是全部内容了

你肯定很好奇 我为什么不详细讲讲 各种详细的用法 方法?

以及后面的随机流 数组流等等

首先网上有很多详细的介绍 但我发现无论多么详细 都没有书上(Java实用教程第六版)写得好

我们很多同学我觉得犯了一个很典型的错误,宁愿来CSDN看解说和解析 都不愿意去看看教材,完全忘记了高中时期的学习方法,要是你没有手机电脑难道就不能学习了吗?

一定要回归教材 多看纸质书 不要天天盯着手机看CSDN上面碎片化的解说 因为这样你的知识是零散的,不是系统的, 最怕就是这样的知识架构 感觉自己学了很多 会了很多 一考就散掉 因为你的架构和结构不牢固 不是系统学习过的样子 这也是很多培训班 和我们科班的区别 但是可悲的是 现在的大学生学习方法 还不如外面的培训班 有些人四年读下来 不仅和培训班一样没有基础 甚至还没培训班出来的人员能干活 简直两边不讨好 非常典型的现状。

当然 我之后会把详细的网络解析链接附上 但我还是强烈建议同学们回归教材。

Java IO流(超详细!)

对象流ObjectInputStream的使用

【Java基础-3】吃透Java IO:字节流、字符流、缓冲流

第二 后面的随机流

和数组流不是考试的要求范围 所以我就不一一介绍了 我先帮各位把逻辑梳理清楚 然后后面的修行就靠各位自己了

最后 我想说的是什么呢

自我反思

过去一年左右 大学2022年 我觉得是我人生事业20年来最低谷的一段时期,各种摆烂 颓废的想法都有,而且疲于调整自己 我觉得很羞愧

好歹过去一年 认识了很多优秀的同学和朋友,以及姐妹 无形中助力 我想和他们一样优秀 慢慢开始有调整自己的想法

然后在2022年末期,上了IT文件检索课(陶然老师的),老师看起来很佛系,但讲的道理我都是认真听了的

颇有感悟 我在课程PPT上写了这样的结束语。

我想说的很简单,我很感谢有这样一位的老师,也许很多话他也是无意说的,但我都听进去了

我也get到了很多 他要表达的意思, 瞬间点醒了颓废一年的我 再加上重新开放的country政策

希望终于回来了。

但是我们要知道 很多时候是不会有人来点醒你的 能碰到是运气好 那万一运气不好呢,难道我们就要一直沉沦下去 难道我们就要一直期待有一个人来点醒你吗?

低谷的尽头 你能期望拯救自己的人应该只能是自己

很多时候这种时刻看起来很普通 但很多人很多时候就是遇不见 就是不会调整自己 就是不知道反思

就像过去一年的我一样

我一直觉得自己不够优秀 事实也如此 不够努力 事实更是如此

疏于调整 疏于反思自己 太过浮躁 事实也是这样

2023年新的一年

希望我们一起进步 丢弃霉运 大步向前 突破自己

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨骅麟(Patrick Young)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值