1.输入字节流InputStream
IO 中输入字节流的继承图可见上图,可以看出:
1)、InputStream 是所有的输入字节流的父类,它是一个抽象类。
2)、ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。
3)、ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。
2.输出字节流OutputStream
IO 中输出字节流的继承图可见上图,可以看出:
1)、OutputStream 是所有的输出字节流的父类,它是一个抽象类。
2)、ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,
3)、ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。
3.字符输入流Reader
在上面的继承关系图中可以看出:
1)、Reader 是所有的输入字符流的父类,它是一个抽象类。
2)、CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。3)、3)、PipedReader 是从与其它线程共用的管道中读取数据。
4)、BufferedReader 很明显就是一个装饰器,它和其子类负责装饰其它Reader 对象。
5)、FilterReader 是所有自定义具体装饰流的父类,其子类PushbackReader 对Reader 对象进行装饰,会增加一个行号。
6)、InputStreamReader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream 转变为Reader 的方法。我们可以从这个类中得到一定的技巧。Reader 中各个类的用途和使用方法基本和InputStream 中的类使用一致。后面会有Reader 与InputStream 的对应关系。
4.字符输出流Writer
在上面的关系图中可以看出:
1)、Writer 是所有的输出字符流的父类,它是一个抽象类。
2)、CharArrayWriter、StringWriter 是两种基本的介质流,它们分别向Char 数组、String 中写入数据。3)、PipedWriter 是向与其它线程共用的管道中写入数据,
4)、BufferedWriter 是一个装饰器为Writer 提供缓冲功能。
5)、PrintWriter 和PrintStream 极其类似,功能和使用也非常相似。
6)、OutputStreamWriter 是OutputStream 到Writer 转换的桥梁,它的子类FileWriter 其实就是一个实现此功能的具体类(具体可以研究一SourceCode)。功能和使用和OutputStream 极其类似,后面会有它们的对应图。
1、字符流 reader和writer
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader(new File(".","zFileDemo.java"));
fw = new FileWriter(new File("demo.java"));
//1、原始的操作
/*int num = 0;
while((num = fr.read())!=-1){
System.out.println((char)num);
}*/
//2、一次读取指定大小的操作
/*int len = 0;
char[] buffer = new char[1024];//用的是字符数组
while((len = fr.read(buffer))!=-1){
System.out.println(new String(buffer, 0, len));
}*/
//3、带缓存区的字符操作
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
String lineContent = null;//br.readLine();
while((lineContent = br.readLine())!=null){
System.out.println(lineContent);
System.out.println(lineContent.length());
System.out.println(lineContent==null);
System.out.println(lineContent.equals(""));
//fw.write(lineContent);
//fw.write("\n");
bw.write(lineContent);
bw.write("\n");//回行
}
bw.flush();//一定要flush到文件中
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2、字节流
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamDemo {
public static void main(String[] args) {
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(new File("bjt.jpg"));
fileOutputStream = new FileOutputStream(new File("bjt2.jpg"));
int bytes = 0;//fileInputStream.read();
while((bytes = fileInputStream.read())!=-1){
fileOutputStream.write(bytes);
}
fileOutputStream.flush();
System.out.println("--------");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fileInputStream!=null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fileOutputStream!=null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main2(String[] args) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream("bjt.jpg"));
bos = new BufferedOutputStream(new FileOutputStream(new File("bjt3.jpg")));
byte[] buffer = new byte[1024];
int len = 0;
while((len = bis.read(buffer))!=-1){
bos.write(buffer, 0, len);
}
bos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(bis!=null){
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
1、http://blog.csdn.net/zzp_403184692/article/details/8057693
2、http://wenku.baidu.com/link?url=DMM0iEUegOWLIslmtnAct4gMlIBVMnYSW3Lz0_OSzmoNdJnUrmnnZLVOORu6nJWVnbMlPe-FL3GRQ-uRKA80CbLdXrA4BXzW9YUMN-_wYa7