I/O流
流的分类
- 操作数据单位:字节流、字符流
- 数据的流向:输入流、输出流
- 流的角色:节点流、处理流
流的体系结构
| 抽象基类 | 节点流(或文件流) | 缓存流(处理流的一种) |
|---|---|---|
| InputStream | FileInputStream | BufferedInputStream |
| OutputStream | FileOutputStream | BufferedOutputStream |
| Reader | FileReader | BufferedReader |
| Writer | FileWriter | BufferedWriter |
字符流输入且输出
File file = new File("hello.txt");File filecopy = new File("hello1.txt");FileReader in = null;FileWriter out = null;try {char[] cur = new char[5];int len;//构造器true,不会覆盖out = new FileWriter(filecopy,true);in = new FileReader(file);while((len = in.read(cur))!=-1){out.write(cur,0,len);}} catch (IOException e) {e.printStackTrace();}finally{if(out!=null){try {out.close();} catch (IOException e) {e.printStackTrace();}}if(in!=null){try {in.close();} catch (IOException e) {e.printStackTrace();}}}
字节流输入输出
File file = new File("q.png");File filecopy = new File("q1.png");FileInputStream in = null;FileOutputStream out = null;try {//构造器true,不会覆盖byte[] cur = new byte[5];int len;out = new FileOutputStream(filecopy,true);in = new FileInputStream(file);while((len = in.read(cur))!=-1){out.write(cur,0,len);}} catch (IOException e) {e.printStackTrace();}finally{if(out!=null){try {out.close();} catch (IOException e) {e.printStackTrace();}}if(in!=null){try {in.close();} catch (IOException e) {e.printStackTrace();}}}
处理流之一缓存流
提高流的读写速度,原因:内部提供了一个缓存区
- 代码
//造文件File srcfile = new File("1.png");File destfile = new File("2.png");BufferedInputStream bis = null;BufferedOutputStream bos = null;try {//造流//造节点流FileInputStream fis = new FileInputStream(srcfile);FileOutputStream fos = new FileOutputStream(destfile);//造缓冲流bis = new BufferedInputStream(fis);bos = new BufferedOutputStream(fos);//复制的细节:读取、写入byte[] buffer = new byte[1024];int len;while((len = bis.read(buffer))!=-1){bos.write(buffer,0,len);}} 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();}}}
处理流的一种:转换流
读取UTF-8
InputStreamReader isr = null;try {FileInputStream fis = new FileInputStream("UT8-8.TXT");isr = new InputStreamReader(fis, "UTF-8");char[] cbuf = new char[20];int len;while((len=isr.read(cbuf))!=-1){for(int i =0;i<cbuf.length;i++){System.out.println(cbuf[i]);}}} catch (IOException e) {e.printStackTrace();}finally {if(isr!=null){try {isr.close();} catch (IOException e) {e.printStackTrace();}}}
