java之装饰者模式、打印流、合并流

  装饰者模式(高内聚 低耦合)

    思想:将原有的功能进行提升

  装饰者步骤

    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();
	}
}


阅读更多

没有更多推荐了,返回首页