装饰着模式:
思想:通过装饰对原来的功能进行升级
实现装饰着模式步的骤:
1.把被装饰者写成成员变量
2.构造方法中赋值该成员变量
3.对原功能升级
举例:
public static void fun() throws FileNotFoundException, IOException {
FileReader fr = new FileReader("/Users/lanou/Desktop/Test/znb.txt");
LineNumberReader lnr = new LineNumberReader(fr);
lnr.setLineNumber(100);
String string = " ";
while ((string = lnr.readLine()) != null) {
System.out.println(lnr.getLineNumber()+ ":" +string);
}
lnr.close();
}
class FJLineNumberReader {
private Reader reader;
private int number = 0;
public FJLineNumberReader() {
super();
}
public FJLineNumberReader(Reader reader) {
super();
this.reader = reader;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String myRead() throws IOException {
number++;
StringBuffer stringBuffer = new StringBuffer();
int len = 0;
while ((len = reader.read()) != -1) {
if (len == '\n') {
return stringBuffer.toString();
} else {
stringBuffer.append((char)len);
}
}
if (stringBuffer.length() == 0) {
return null;
}
return stringBuffer.toString();
}
public void myClose() throws IOException {
reader.close();
}
}
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("/Users/lanou/Desktop/Test/znb.txt");
FJLineNumberReader lnr = new FJLineNumberReader(fr);
lnr.setNumber(100);
String string = " ";
while ((string = lnr.myRead()) != null) {
System.out.println(lnr.getNumber() + ":"+ string);
}
lnr.myClose();
}
打印流:
打印流,只能输出
PrintStream(字节):
构造方法的参数:
1.文件(File)
2.字节输出流(OutputStream)
3.字符输出流(Writer)
4.文件路径
PrintWriter(字符):
构造方法的参数:
1.文件(File)
2.字节输出流(OutputStream)
3.文件路径
打印流的特点:
1.只能作为数据的目的地
2.可以把数据原样输出
3.永远不会抛出IOException,但是可以抛出其他异常
4.打印流相当于给其他的流对象装饰一个原样输出功能
System.in:
是BufferedInputStream缓冲输入字节流
作用:接收键盘输入内容
System.out:
是PrintStream打印输出字节流
作用:输出内容到控制台
举例:
public static void fun() throws FileNotFoundException {
File file = new File("/Users/lanou/Desktop/Test/znb.txt");
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
PrintStream ps = new PrintStream(bos);
ps.println("zhansan");
ps.println(true);
ps.println(100);
ps.println(3.5);
ps.write(100);
ps.println('p');
ps.close();
}
public static void fun() throws FileNotFoundException {
File file = new File("/Users/lanou/Desktop/Test/znb.txt");
PrintWriter pw = new PrintWriter(file);
pw.println("haha");
pw.println(200);
pw.println(false);
pw.flush();
pw.close();
}
public static void fun() throws IOException {
System.out.println("请输入");
InputStream in = System.in;
StringBuilder stringBuilder = new StringBuilder();
int len = 0;
while (true) {
if (stringBuilder.toString().endsWith("quit")) {
break;
}
len = in.read();
if (len == '\n') {
System.out.println(stringBuilder.toString());
stringBuilder.delete(0, stringBuilder.length());
}else {
stringBuilder.append((char)len);
}
}
}