——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
视频学习io装饰设计模式
学习中痛并快乐,虽然程序中bug很多,但找出bug会很快乐!!!
(所谓的设计模式原来就是把原有的方法优化一下,听着很高上大,其实就是一种思想。)
package com.itheima.heima;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
*
* 装饰设计模式的拓展 所谓的设计模式 就是对原有的方法进行优化
*
* @author Administrator
*
*
*/
public class CustomBufferedReader {
public static void main(String[] args) {
//先别管这麽多,先声明一下,等下好关闭流
FileReader fr=null;
MyBufferedReader mbf=null;
try {
fr=new FileReader("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\itheima\\src" +
"\\com\\itheima\\heima\\CustomBufferedReader.java");
mbf=new MyBufferedReader(fr);
String len=null;
while((len=mbf.myReadLine())!=null){
System.out.println(len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fr!=null)
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//装饰类,相当于BufferedReader类
class MyBufferedReader extends Reader {
private Reader rd;
MyBufferedReader(Reader rd) {
super();
this.rd = rd;
}
//增强的方法 ,在原来的BufferedReader 的对象中 str=br.readLine();,返回也是String对象
//在windows中 ,读取文本文件以 “\r\t” 为回车
public String myReadLine() {
//定义一个字符串容器
StringBuilder sb=new StringBuilder();
int len=-1;
//读取字符流
try {
while((len=rd.read())!=-1){
if(len=='\r')
continue;
if(len=='\n')
return sb.toString();
else{
sb.append((char)len);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(sb.length()!=0)
return sb.toString();
return null;
}
public void myClose() throws IOException{
rd.close();
}
@Override
public void close() throws IOException {
// TODO Auto-generated method stub
rd.close();
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
// TODO Auto-generated method stub
return read( cbuf, off, len);
}
}
貌似这种网页,用着就像在做一个网页一样,用这个第四次哦写文章,感觉还不错~~~
BufferedReaader装饰类的升级版LineNumberReader
LineNumberReader作为BufferedReader的升级版,它不仅具备BufferedReader的所有功能,同时他常用的方法:setLineNumber();设置行号初始值,getLineNumber();获取行号~~~~
package com.itheima.heima;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
/**
*
* 带行号 的缓冲 区 功能上要比BufferedReader 的功能要强
*
* LineNumberReader 也是一个装饰类
*
* @author Administrator
*
*/
public class LineNumberReaderAdmin {
public static void main(String[] args) {
getLineNumberRaeder();
}
private static void getLineNumberRaeder() {
// TODO Auto-generated method stub
//被装饰的对象
FileReader fr=null;
//装饰的对象
LineNumberReader lnr=null;
try {
fr=new FileReader("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\itheima\\src" +
"\\com\\itheima\\heima\\CustomBufferedReader.java");
lnr=new LineNumberReader(fr);
//可以设置行号的初始值
lnr.setLineNumber(1000);
String str=null;
try {
while((str=lnr.readLine())!=null){
//带行号的显示 getLineNumber()
System.out.println(lnr.getLineNumber()+":"+str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
模拟LineNumberReader类
徒手封装一个MyLineNumberRaeder
package com.itheima.heima;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* 自定义LineNumberReader
*
* @author Administrator
*
*/
public class CustomLineNumberReader {
public static void main(String[] args) {
//别装饰的对象
FileReader fr=null;
//装饰的对象
MyLineNumberReader mlnr=null;
try {
fr=new FileReader("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\itheima"
+"\\src\\com\\itheima\\heima\\LineNumberReaderAdmin.java");
mlnr=new MyLineNumberReader(fr);
String myLineNumberMethod = null;
//设置初始值
mlnr.setMyLineNumber(2000);
try {
while((myLineNumberMethod=mlnr.myLineNumberMethod())!=null){
//自定义打印带行号的
System.out.println(mlnr.getMyLineNumber()+":"+myLineNumberMethod);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//自定义类
class MyLineNumberReader{
//定义一个计数器
private int myLineNumber=0;
private Reader rd;
//get,set方法
public int getMyLineNumber() {
return myLineNumber;
}
public void setMyLineNumber(int myLineNumber) {
this.myLineNumber = myLineNumber;
}
//把传进来对作用于本类对象
public MyLineNumberReader() {
super();
}
public MyLineNumberReader(Reader rd) {
super();
this.rd = rd;
}
public String myLineNumberMethod() throws IOException{
myLineNumber++;
//定义一个容器,用来存储字符串
StringBuilder sb=new StringBuilder();
//单个读取文件
int read = -1;
//循环读取
while((read=rd.read())!=-1){
if(read=='\r')
continue;
if(read=='\n')
return sb.toString();
else{
sb.append((char)read);
}
}
//如果容器里还有,就返回~~~
if(sb.length()!=0)
return sb.toString();
return null;
}
public void myClose() throws IOException{
rd.close();
}
}
----------
LineNumberRaeder的终极版
> 又没发现自己正在做一件非常有意义的事情啊,~~~~
----------
package com.itheima.heima;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* 自定义LineNumberReader的再次优化版
*
*
* @author Administrator
*
*/
public class CustomLineNumberReader {
public static void main(String[] args) {
//别装饰的对象
FileReader fr=null;
//装饰的对象
MyLineNumberReader mlnr=null;
try {
fr=new FileReader(“C:\Users\Administrator\Workspaces\MyEclipse 8.5\itheima”
+”\src\com\itheima\heima\LineNumberReaderAdmin.java”);
mlnr=new MyLineNumberReader(fr);
String myLineNumberMethod = null;
//设置初始值
mlnr.setMyLineNumber(2000);
try {
while((myLineNumberMethod=mlnr.myLineNumberMethod())!=null){
//自定义打印带行号的
System.out.println(mlnr.getMyLineNumber()+":"+myLineNumberMethod);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(mlnr!=null)
try {
//继承父类的方法
mlnr.myClose();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//自定义类
class MyLineNumberReader extends MyBufferedReader{
//定义一个计数器
private int myLineNumber=0;
//get,set方法
public int getMyLineNumber() {
return myLineNumber;
}
public void setMyLineNumber(int myLineNumber) {
this.myLineNumber = myLineNumber;
}
//把传进来对作用于本类对象
public MyLineNumberReader(Reader rd) {
//继承父类
super(rd);
}
public String myLineNumberMethod() throws IOException{
myLineNumber++;
//继承父类的方法
return super.myReadLine();
}
}
“`
学习是一种信仰,优秀是一种习惯~~~~~~~~~~~~~