[java基础揉碎]文件&&IO流

目录

文件

什么是文件

 文件流​编辑

常用的文件操作 

创建文件方式一 

创建文件方式二 

创建文件方式三

tip:为什么new file 了还有执行createNewFile?new File的时候其实是在内存中创建了文件对象, 还没有在磁盘中, 当执行createNewFile的时候才是往磁盘中写入​编辑

获取文件的信息 (常用)

目录的操作 (windows文件夹), 在java中目录也被当作一个文件,方式使用没有区别

Io流

 io原理即流的分类

​编辑

字节流常用子类

 文件输入流​编辑

文件输出流

文件拷贝

字符流

FileReader

FileWriter

close和flush都可以实现写入,但是close相等于flush我刷新还有个关闭

 节点流和处理流(包装流)

​编辑

处理流修饰器模式模拟

节点流和处理流的区别

BufferedReader使用方法 

 BufferedWriter使用方法 

字节处理流 

字节处理流视频拷贝使用方法 

对象流

​编辑

对象流的使用

​编辑

对象流的细节 

标准输入输出流 

转换流

InputStreamReader上面的问题用转换流后得到解决 

 OutputStreamWriter

字节打印流 

字符打印流

Properties


​​​​​​​文件

什么是文件

 文件流

常用的文件操作 

创建文件方式一 

 

创建文件方式二 

 

创建文件方式三

这里这样写也是可以的,反斜杠

tip:为什么new file 了还有执行createNewFile?
new File的时候其实是在内存中创建了文件对象, 还没有在磁盘中, 当执行createNewFile的时候才是往磁盘中写入

获取文件的信息 (常用)

 

目录的操作 (windows文件夹), 在java中目录也被当作一个文件,方式使用没有区别

 

Io流

 io原理即流的分类

字节流和字符流那个效率高呢?字符流(应用于文本文件等), 因为字符流的单位比字节大, 至于一个字符等于多少个字节需要看他的编码格式; 那为什么还用字节流呢? 因为还有一些二进制文件,例如声音文件,视频文件, word文件

 

字节流常用子类

 文件输入流

演示读取文件(这种方法不能有汉字,因为是一个字节一个字节读的, 汉字是三个字节,只读了一个, 就会乱码)
单个字节的读取,效率比较低

 

改为字节数组的方式,效率比较快

文件输出流

 

文件拷贝

 

一定要使用write(buf,0,readLen)这个方法写, 如果用 write(buf),在最后几个字节传输长度不够数组长度但是还是传了这么多的时候,图片不会显示

 

此时运行可能会报这个错,这是c盘需要管理员权限才能访问 , 所以可以改用其他盘上面测试 

 

字符流

FileReader

第二种方式, 效率会高一点

FileWriter

 

不关流不会成功写入 

 

 

第二种数组写入

第三种写入

 

第四种写入 

第五种写入 

 

close和flush都可以实现写入,但是close相等于flush我刷新还有个关闭

 节点流和处理流(包装流)

因为BufferedWriter的构造器传进去的是Writer, 也就是说继承了 Writer的子类都可以传进去, 这也是一种设计模式叫修饰器模式

处理流修饰器模式模拟

 

现在上面的FileReader和StringReader相当于节点流, 对单个数据源类别进行读取, 如果我们要扩展怎么扩展呢

将Reader作为一个属性, 同时通过构造器传进来, 因为继承了Reader就可以调用它的方法

现在给Reader_加两个未实现的方法

 在处理流里面, 调用传进来的字节流的方法

在处理流对象中就可以进行调用到字节流的读取

 

扩展:上面是示意写了两个方法, 其实可以统一为read:

其他的对应跟着改, 让他动态绑定去实现 

节点流和处理流的区别

 

BufferedReader使用方法 

 BufferedWriter使用方法 

文本文件拷贝的案例 

字节处理流 

字节处理流视频拷贝使用方法 

对象流

对象流的使用

序列化

 

反序列化

 

对象流的细节 

标准输入输出流 

 

转换流

字节转换为字符

 案例:

目前有一个utf-8的文件,去读取里面文件内容, 可以看到能正确读取

把它转为国标码之后(这个国标码每个国家有自己的国标码, 根据当前系统来看的, 如果当前系统用的是gbk那么国标码就是gbk)

 现在再来读取就会乱码

具体实现

 

InputStreamReader
上面的问题用转换流后得到解决 

 

 OutputStreamWriter

 

字节打印流 

 

 打印到文件

字符打印流

 打印到显示器, 因为传入的是标准输出

输出到指定文件中去 

如果不关流, 文件是进不去的 

 

Properties

传统的方式读取

传统的方法如果我们要获取指的的值,只能自己写判断, 其他的不要 

 用Properties

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值