目录
文件
什么是文件
文件流编辑
常用的文件操作
创建文件方式一
创建文件方式二
创建文件方式三
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