装饰者模式(解耦 不让类和类产生继承的关系)
对 对象的原有功能进行升级
书写步骤:
- 1.明确被装饰的对象
- 2.将被修饰的对象 通过构造方法传入 装饰类
- 装饰类中 肯定有 一个成员变量 就是被装饰的对象
- (拥有被装饰的对象 相当于可以调用该对象中的所有方法)
例:
//学习的接口
interface Study{
void study();
}
//在校学生
class Student implements Study{
@Override
public void study() {
// TODO Auto-generated method stub
System.out.println(“在校学习了C C++ C#”);
}
}
//装饰类
class LOStudent implements Study{
//将被装饰者声明为成员变量
private Student student;
//提供有参的构造方法
public LOStudent() {
// TODO Auto-generated constructor stub
}
public LOStudent(Student student) {
super();
this.student = student;
}
//对方法进行装饰(升级)
@Override
public void study() {
// TODO Auto-generated method stub
//调用原有的学习方法
student.study();
//装饰新功能
System.out.println(“学习Java H5 U3D”);
}
}
public static void main(String[] args) {
Student student = new Student();
LOStudent loStudent = new LOStudent(student);
loStudent.study();
}
LineNumberReader
File file = new File("/Users/lanou/Desktop/Test/登鹳雀楼.txt");
FileReader frFileReader = new FileReader(file);
LineNumberReader lnr = new LineNumberReader(frFileReader);
//设置行号(默认从100开始)
lnr.setLineNumber(100);
String string = null;
while ((string = lnr.readLine()) != null) {
System.out.println(lnr.getLineNumber() + " : " + string);
}
lnr.close();
打印流
- 1.永远不会抛出IO异常
- 2.原样输出到目的端
- PrintStream 字节流
- 构造方法: 字符串路径 文件对象 字节流对象
- PrintWriter 字符流
- 构造方法:字符串路径 文件对象 字符流对象 字符流对象
- 注意:只有操作流对象 才能自动刷新
例:
FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Test/抽象圣经.txt");
PrintStream ps = new PrintStream(fos);
//写文件
ps.println(“那是真的牛皮”);
ps.print(“NM$L”);
ps.close();
FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Test/抽象圣经.txt");
PrintWriter pw = new PrintWriter(fos,true);
//写文件
pw.println(“那是真的牛皮”);
pw.print(“NM$L”);
pw.println(“深海哥你来啦!”);
pw.close();
合并流
- SequenceInputStream
- 作用:可以将多个文件合并成一个新的文件
例:
//合并文件
File file1 = new File("/Users/lanou/Desktop/Copy/1.txt");
File file2 = new File("/Users/lanou/Desktop/Copy/2.txt");
FileInputStream fis1 = new FileInputStream(file1);
FileInputStream fis2 = new FileInputStream(file2);
//创建合并流
SequenceInputStream sis = new SequenceInputStream(fis1, fis2);
//写入到新的文件中
FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Copy/4.txt");
//读写
int len = 0;
while ((len = sis.read()) != -1) {
fos.write(len);
}
//关闭流
sis.close();
fos.close();