IO流
四个类全是抽象类(站在java程序角度)
FileWriter字符输出流
等同于下面 这句代码 ||
1) 因为FileWriter底层会自动创建文件,如果有a.txt就覆盖,如果没有就创建
详解:
2) 这步完成后并没有写到文件中,而是写到了缓冲区,所以接着还要fw.flush();
3) 流对象如果不手动释放资源,jvm的垃圾回收器永远不会释放流对象,所以需要手动释放资源
为什么要close()呢?
1.让流对象变成垃圾(流对象不能再继续使用)
2.通知系统去释放和文件相关的资源.
↓↓↓↓↓↓↓
问题3答案:两种方法都不可取,因为每写入一个字就调用一次flush的话,如果写入大量文字的时候这时候效率就太低了,但是如果写入大量文字在缓冲区,直接等到close()再刷新的话如果文字太多,不及时刷新缓冲区的话,又怕会内存溢出,所以要设置刷新间隔,
所以开发中一般这样写:每一万次以后刷新一次缓冲区.
----------------------------------------------------------------------------------------------------------------------
写入数据
Windows记事本不识别”\n”,必须用”\r\n”
而有些软件,在制作的时候为了通用,对任何换行符都可以识别.
③数据每次都把以前的给覆盖了,如果我想追加写入,怎么办?
构造的时候,用带两个参数的。这样就不会删除以前的文件,而是在以前的文件上追加写入
public FileWriter(String fileName,boolean append)//后面的boolean默认是false不追加,想追加需手动改为true
标准异常处理代码(close()必须放在finally{}里面)
----------------------------------------------------------------------------------------------------------------------
FileReader字符输入流
一次读取一个字符:(3步)
Int可以接收char类型,但是返回的是int类型,是char在asik码表里面对应的值.
回车换行符(\r\n)默认不显示,占两个字符
等同于下面的代码,开发写法↓↓↓↓↓↓
案例:cn.itcast02.CopyFile.java
把项目路径下的FieldWriterDemo.java赋值到D:\\Copy.java中
思路: |
|