1、数据的流向以Java程序为参照物。
2、IO的分类
(1)输入流、输出流
(2)字节流、字符流
(3)节点流、处理流
3、字节流
(1)核心类InputStream和OutputStream,是所有字节流的父类,都是抽象类(不能直接生成对象),FileInputStream读文件,FileOutputStream写文件。
(2)核心方法:InputStream: int read (byte []b, int off, int len),OutputStream: void write(byte []b, int off, int len)。
(3)大文件的读取,使用循环来读取(需捕获异常):
fis = new FileInputStream("from.txt");
fos = new FileOutputStream("to.txt");
byte[] buffer = new byte[1024];
while(true) {
int temp = fis.read(buffer, 0, buffer.length);
if (-1 == temp) {
break;
}
fos.write(buffer, 0, temp);
}
fis.close();
fos.close();
4、字符流:读写文件时,以字符为基础
字符输入流:Reader <-- FileReader : int read(char[] c, int off, int len);
字符输出流:Writer <-- FileWriter: void writer(char[] c, int off, int len);
fis = new FileReader("from.txt");
fos = new FileWriter("to.txt");
byte[] buffer = new byte[1024];
int temp = fis.read(buffer, 0, buffer.length);
fos.write(buffer, 0, temp);
fis.close();
fos.close();
5、节点流和处理流
(1)节点流是管道中流淌的数据。处理流在节点流上加上新的功能,对管道中流淌的数据进行处理。
(2)BufferReader,字符输入处理流,主要方法为 public String readLine() throws IOException{}
FileReader fileReader = new FileReader("in.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = null;
while (null != bufferedReader.readLine()) {
System.out.println(line);
}
bufferedReader.close();
fileReader.close();
(3)使用处理流时必须要有处理流,即上例中的fileReader。处理流使用的是装饰者模式。
6、装饰者模式
实例:
(1)A公司水管工、B公司水管工,A公司木工、B公司木工
(2)Worker为接口,Plumber为Worker的子类,Aworker也为Worker的子类。
class AWorker implements Worker {
private Worker worker;
public AWorker(Worker worker) {
this.worker = worker;
}
public void DoSomeWork() {
System.out.println("你好");
worker.DoSomeWork();
}
}
(3)调用方法:
Plumber plumber = new Plumber();
AWorker aworker = new AWorker(plumber);
aworker.DoSomeWork();