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