装饰者模式(高内聚 低耦合)
思想:将原有的功能进行提升
装饰者步骤
1.将被装饰者当做类中一个成员变量
2.在构造方法中进行成员变量的赋值
赋值后 就相当于可以拿到被装饰者这个对象
有这个对象 就能调用该对象的方法
3.对方法进行升级
public class Demo01 {
public static void main(String[] args) {
//测试
Student student=new Student();
//注意:创建时一定要给被装饰者赋值
LOStudent loStudent=new LOStudent(student);
loStudent.studyCode();
}
}
//学习代码的接口
interface Study{
//学习代码
public abstract void studyCode();
}
class Student implements Study{
@Override
public void studyCode() {
System.out.println("学习C语言");
System.out.println("学习C++语言");
System.out.println("学习C#语言");
}
}
//学生类
class LOStudent implements Study{
//将学生作为成员变量
private Student student;
//生成构造方法
public LOStudent() {
super();
// TODO Auto-generated constructor stub
}
public LOStudent(Student student) {
super();
this.student = student;
}
//对学生方法进行升级
@Override
public void studyCode() {
// 调用被装饰者的功能
student.studyCode();
//升级
System.out.println("学Java");
System.out.println("学 扯犊子");
}
}
测试LineNumberRead
private static void fun1() throws FileNotFoundException, IOException {
File file = new File("/Users/lanou/Desktop/Test/asds.txt");
FileReader fr = new FileReader(file);
LineNumberReader lnr = new LineNumberReader(fr);
//设置行号
lnr.setLineNumber(100);
String string = "";
//读文件
while((string=lnr.readLine())!=null) {
//打印行号和内容
System.out.println(string+":"+lnr.getLineNumber());
}
lnr.close();
}
打印流(永远不会抛出IO异常)
操作输出目的(写文件 控制台打印)
PrintStream(字节流)
构造方法:文件 字节输出流 路径
PrintWriter(字符流)
构造方法:文件 字节输出流 路径 字符输出流
核心功能:原样输出到目的端
System.in是BufferedInputStream对象
System.out是PrintStream对象(打印流)
private static void fun1() throws FileNotFoundException {
File file=new File("/Users/lanou/Desktop/Test/dahai.txt");
FileOutputStream fos=new FileOutputStream(file);
PrintStream ps=new PrintStream(fos);
//写入
ps.println("haha");
ps.println("100");
ps.print(true);
//关闭
ps.close();
}
private static void fun2() throws IOException {
File file=new File("/Users/lanou/Desktop/Test/dahai.txt");
//开启自动刷新的构造方法 只对流有效
FileWriter fw=new FileWriter(file);
PrintWriter pw=new PrintWriter(fw);
pw.println("dahaiba");
pw.println(true);
//关闭资源(关闭前会刷新)
pw.close();
}
合并流
SequenceInputStream
作用:可以把多个文件读成一个文件(合并成一个文件)
文件不局限是文本
public class Demo05 {
public static void main(String[] args) throws IOException {
//将3个文件写到第四个文件中
File file1=new File("/Users/lanou/Desktop/Test/1.txt");
File file2=new File("/Users/lanou/Desktop/Test/2.txt");
File file3=new File("/Users/lanou/Desktop/Test/3.txt");
//创建集合
Vector<FileInputStream> vector=new Vector<>();
//向集合中添加要合并的文件
vector.add(new FileInputStream(file1));
vector.add(new FileInputStream(file2));
vector.add(new FileInputStream(file3));
//获取迭代器
Enumeration<FileInputStream> elements=vector.elements();
//创建合并流
SequenceInputStream sis=new SequenceInputStream(elements);
//写入第四个文件
FileOutputStream fos=new FileOutputStream("/Users/lanou/Desktop/Test/4.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos);
BufferedWriter bw=new BufferedWriter(osw);
//读写
int len=0;
while ((len=sis.read())!=-1) {
bw.write(len);
bw.newLine();
bw.flush();
}
//关闭资源(只关合并流就行)
sis.close();
fos.close();
}
}