ok了家人们今天还是学习IO流,
一.打印流【了解】
1.1 打印流的概述
我们平时使用的System语句就是调用了print()方法和println()方法。
这两个方法都来自于
java.io.PrintStream
类。
作用:
该类能够方便地打印各种数据类型的值,写入数据后可以实现自动
换行。
通常用于日志记录
1.2 打印流的构造方法
public PrintStream(String fileName) : 使用指定的文件名创建一个新
的打印流
PrintStream ps = new PrintStream("ps.txt");
1.3
打印流的使用
PrintStream ps = new PrintStream("ps.txt");
ps.println(100);
ps.println(true);
ps.println(你好);
ps.println(HelloWorld);
二.装饰者设计模式
设计模式就总结出来的一套解决开发中各类问题现成方案(固定套
路)
装饰者设计模式:在不改变原类
,
不使用继承的基础上,动态地扩展
一个对象的功能。
装饰模式遵循原则
:
装饰类和被装饰类需要有共同的父类型
(
接口
)
在装饰类中必须传入被装饰类的对象
在装饰类中对需要扩展的方法进行扩展
在装饰类中对不需要扩展的方法调用被装饰类中的同名方法
public interface Car {
void color();
void run();
String jiayou(String you);
}
public class QQCar implements Car{
@Override
public void color() {
System.out.println("绿色");
}
@Override
public void run() {
System.out.println("每秒跑1米");
}
@Override
public String jiayou(String you) {
return "车要加"+you;
}
}
public class QQWapper implements Car{
private QQCar qqCar;
public QQWapper(QQCar qqCar) {
this.qqCar = qqCar;
}
@Override
public void color() {
System.out.println("彩色");
}
@Override
public void run() {
System.out.println("每秒跑1万米");
}
@Override
public String jiayou(String you) {
return jiayou(you);
}
}
public class CarTest {
public static void main(String[] args) {
QQCar qqCar = new QQCar();
QQWapper qqWapper = new QQWapper(qqCar);
qqWapper.color();
qqWapper.run();
}
}
扩展:方法增强的多种方式
继承
:
子类继承父类
,
重写父类中的方法
,
对方法进行增强
装饰模式
(
装饰者模式
)
动态代理
:
在不修改源码的基础上实现方法的增强
//字符输入缓冲流: BufferedReader 特点:提高读的效率
情况:在使用FileReader类时,发现读的效率低,希望提高效率
//不能修改FileReader类、不能继承FileReader类 ,要对
read(char[] cbuf)方法进行增强
//使用装饰者模式解决:
装饰类: BufferedReader
被装饰类: FileReader
//装饰类 具有相同的父类型
public class BufferedReader extends Reader{
//被装饰类
private FileReader fileReader;
//构造方法
public BufferedReader(){}
public BufferedReader(FileReader fileReader){//接收
被装饰类的对象
this.fileReader = fileReader;
}
public BufferedReader(FileReader fileReader , int
size){
this.fileReader = fileReader;
this.size = size;
}
//成员变量
private int size = 1024*8;
//缓冲区对象
char[] cbuf = new char[size];
//重写read()方法
public int read(){
....
read(cbuf);
}
//重写read(char[] cbuf)方法
public int read(char[] cbuf){
.......
}
//重写相关方法
public void close(){
fileReader.close();//调用原有功能
}
}
//多态
Reader read = new BufferedReader( new FileReader("关联
文件") );
三.commons-io工具包
3.1commons-io
工具包的使用
public static int copy(InputStream in, OutputStream out); 把
input输入流中的内容拷贝到output输出流中,返回拷贝的字节个数
(适合文件大小为2GB以下)
public static long copyLarge(InputStream in, OutputStream
out);把input输入流中的内容拷贝到output输出流中,返回拷贝的
字节个数(适合文件大小为2GB以上)
public static void copyFileToDirectory(final File srcFile, final File
destFile) //复制文件到另外一个目录下。
public static void copyDirectoryToDirectory( file1 , file2 );//复制
file1目录到file2位置。
import org.apache.commons.io.IOUtils;
import java.io.*;
public class Work {
public static void main(String[] args) throws Exception {
//public static int copy(InputStream in, OutputStream out); 把
//input输入流中的内容拷贝到output输出流中,返回拷贝的字节个数
//(适合文件大小为2GB以下)
InputStream src = new FileInputStream("D:\\20_IO流(四).pdf");
OutputStream dest = new FileOutputStream("java_0730\\IO.txt");
IOUtils.copy(src,dest);
}
}
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class FileTEST {
public static void main(String[] args) throws IOException {
File src = new File("D:\\笔记资料");
File dest = new File("D:\\1");
FileUtils.copyDirectoryToDirectory(src,dest);
}
}
ok了io学完了,下面学习多线程。