21.1 字节流与字符流
字节流:按基本元素字节读写的流
抽象基类:InputStream,OutputStream
字符流:与编码表结合,按字符读写的流
抽象基类:Reader,Writer
21.2 FileWriter
继承关系:Writer-OutputStream-FileWriter
FileWriter fw = new FileWriter("x:/xx/xx");
文件不存在时自动创建,文件存在时覆盖原文件
21.3 换行和续写
换行/r(windows) /n(Unix)
建议调用System.getProperty("LINE_SEPRATER");
write方法覆盖原数据,续写时设置追加参数为true。
FileWriter fw = new FileWriter("x:/xx/xx", true);
21.4 IO异常处理
为了方便异常处理,在catch和finally中调用,在try语句块外声明
FileWriter fw = null;
try{
//code
}catch(IOException e){
//code
}finally{
if(fw != null)
fw.close();
}
21.5 FileReader读取方法
1.read();读取一个字符,结束时返回-1
2.
char[] buf = new char[3];
int num = fr.read(buf);
读取字符数组
21.6 缓冲区读写
FileWriter fw = new FileWriter("xxx.txt");
BufferedWriter bfw = new BufferedWriter(fw);
bufw.write("abc");
bufw.close();
//缓冲区关闭时,其对应的流也关闭
26.7 装饰设计模式
BufferedReader & BufferedWriter其实是一种装饰模式。
在Reader与Writer的基础上对其所具备的功能进行强化
BufferedReader br = new BufferedReader (Reader);
装饰与继承的区别:
只是为了增强或提高效率进行继承,会使集成体系越发臃肿、复杂。
装饰使用更为灵活。
同时装饰与被装饰类之间不具备抽象关系。
26.8 LineNumberReader
getLineNumber();
setLineNumber();
26.9 操作文件
FileInputStream & FileOutputStream操作字节流,不受文件格式限制。
其可以使用缓冲类 BufferedInputStream & BufferedOutputStream