IO流之三
今天的学习内容主要是字符流与装饰设计模式。
字符流
Reader类的层次:ReaderßInputStreamReaderßFileReader.
FileReader:专门用于处理文件的字符读取流对象。
Writer类的层次:WriterßOutputStreamWriterßFileWriter.
FileWriter:专门用于处理文件的字符写入流对象。
FileReader:
1,用于读取文本文件的流对象。
2,用于关联文件文件。
构造函数:在读取流对象初始化的时候,必须要指定一个被读取的文件。如果该文件不存在会发生FileNotFoundException。
FileReader(String filename);
FileWriter:
1,用于处理文本文件。
2,该类中有默认的编码表,
3,该类中有临时缓冲。
字符留得缓冲区:缓冲区的出现提高了对流的操作效率
原理:将数据进行封装
BufferedWriter:特有方法:newLine();跨平台的换行符。
BufferedReader:特有方法:readLine();一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。
写入缓冲区对象。
FileWriter fw = new FileWriter("res/save");//文件输出流,创建保存路径
BufferedWriter bw = new BufferedWriter(fw);//建立缓冲区,将字符流fw对象做参传递给缓冲区
String content = ta.getText();//创建字符串content来储存文本ta内写入的内容
bw.write(content);//写入content所储存数据于缓冲区
bw.flush();//对缓冲区进行刷新,将数据刷到目的地
bw.close();
fw.close();//在此要注意,若没有bw.flush();bw、fw的关闭,要根据流的封装顺序
读取缓冲区对象。
BufferedReader br=newBufferedReader(new FileReader(“br.txt”));
String line = null;//按照行的形式取出数据。取出的每一个行数据不包含回车符。
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
LeadLine();方法的原理:
其实缓冲区中的该方法:每一次读到一个字符,先不进行具体操作,先进行临时存储。当读取到回车标记时,将临时容器中存储的数据一次性返回。
代码演习:
public String myReadLine() throws IOException {
//创建临时容器。
StringBuildersb = new StringBuilder();
//循环的使用read方法不断读取字符。
int ch = 0;
while ((ch = r.read()) != -1) {
if (ch == '\r')
continue;//当读取到的字符为“\r”时,继续读取
if (ch == '\n')//当读取到的字符为“\n”即换行符时,返回之前读取到的字符串。
return sb.toString();
else
sb.append((char) ch);//添加字符
}
if (sb.length() != 0)
return sb.toString();
return null;
}
装饰设计模式
装饰设计模式,就我理解:组合,方法的组合。
通过以下模式模型来进行一下解释:
装饰模式
M//基本数据对象
|--M1//简单功能1
|--M2//简单功能2
|--M3//简单功能3
A B : new M2(M1)//功能组合(12)
A C : new M3(M1) //功能组合(13)
B C : new M3(M2) //功能组合(23)
A B C : new M3(M2(M1)) //功能组合(123)
装饰模式较通过类的继承来讲,优点是:灵活地实现对象功能的扩展,且较好的防止了子类数量快速膨胀,有利于程序的优化。