黑马程序员技术交流社区
标题:
基础视频Day19练习1
[打印本页]
作者:
不怕黑人
时间:
2015-7-26 21:25
标题:
基础视频Day19练习1
package fuxi2;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 需求:建立一个MyBufferedReader类
* 这其实就是利用了装饰设计模式而设计的装饰类。这种设计模式,主要是对已有对象经行功能增强。其比继承要灵活,避免了继承体系的臃肿,降低了类与类之间的联系。
* 装饰类与被装饰类通常属于同一个体系。
*@author XiaLei
*/
public class Day19Test1 {
public static void main(String[] args) {
MyBufferedReader bufr = null;
BufferedWriter bufw = null;
try{
bufr = new MyBufferedReader(new FileReader("D:\\JAVA\\day13\\StringTest.java"));
bufw = new BufferedWriter(new FileWriter("D:\\StringTest.txt"));
String line =null;//可以理解为缓冲区的中转站
while((line=bufr.myReadLine())!=null){//readLine读取的是换行符之前的内容,当读到换行符时,它就会把读到的内容返回。
bufw.write(line);
bufw.newLine();//所以这里要加上newLine换行
bufw.flush();//有缓冲区必须要刷新
}
}
catch(IOException e){
throw new RuntimeException("读写失败");
}
finally{
try{
if(bufr!=null)
bufr.myClose();//缓冲区关闭,读取写入流也就关闭了,不用单独关闭
}
catch(IOException e){
throw new RuntimeException("关流失败");
}
try{
if(bufw!=null)
bufw.close();
}
catch(IOException e){
throw new RuntimeException("关流失败");
}
}
}
}
class MyBufferedReader{
private FileReader fr;
MyBufferedReader(FileReader fr){
this.fr = fr;
}
public String myReadLine() throws IOException{//根据readLine读取到换行符就返回之前读到的内容这一原理,设计自己的读取方式。
StringBuilder sb = new StringBuilder();//建立容器,将读到的内容存入。
int num = 0;
while((num=fr.read())!=0){
if(num=='\n')
continue;
if(num=='\r')
return sb.toString();
else
sb.append((char)num);
}
if(sb.length()!=0)//当遇到条件判断时,一定要细心。多考虑一些情况!!!!!!!
return sb.toString();
return null;
}
public void myClose() throws IOException{//建立自己的关流动作。
fr.close();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2