目录
目录的操作 (windows文件夹), 在java中目录也被当作一个文件,方式使用没有区别
close和flush都可以实现写入,但是close相等于flush我刷新还有个关闭
InputStreamReader上面的问题用转换流后得到解决
文件
什么是文件

 文件流
 
常用的文件操作

创建文件方式一
 
 
创建文件方式二
 
 
创建文件方式三


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


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
 
 

 
 
 
 

 
 
 
 














