IO
来源:互联网 发布:日本药妆 知乎 编辑:程序博客网 时间:2024/06/06 10:47
1)概述
1. java中用于操作流的对象都在IO包中
2. 流按操作的数据分为:字节流和字符流。字符流只能处理文本,字节流任何都可以处理
3. 流按流向可以分为输入流、输出流
4. 字节流抽象基类:InputStream、OutputStream
字符流抽象基类:Reader、Writer
由这4个基类派生的子类都是以基类作为类名后缀
2) IO操作规律
1. 先看是输入还是输出
输入:InputStream、Reader
输出: OutputStream、Writer
2. 再看是否是纯文本
是:Reader、Writer
否:InputStream、OutputStream
3. 再看源和目的的类型
源:文件、内存、键盘
目的:文件、内存、控制台
4. 最后看是否可以使用装饰类来提高操作效率
例子:从一个文本文件内容复制到另一个文件
1> 源
因为是输入,所以使用InputStream、Reader
因为是纯文本,所以使用Reader
因为是从文件读取,所以使用FileReader
在此处可以使用装饰类提高效率,所以使用BufferedReader
File f = new File("test.txt"); BufferedReader br = new BufferedReader(new FileReader(f));2> 目的
因为是输出,所以使用OutputStream、Writer
因为是纯文本,所以使用Writer
因为操作对象时文件,所以使用FileWriter
在此处可以使用装饰类来提高效率,所以使用BufferedWriter
File f = new File("test.txt"); BufferedWriter bw = new BufferedWriter(new FileWriter(f));3) 输入字节流向输入字符流转换
1. 转换原因:因为转换为字符流之后,就可以使用BufferedReader、BufferedWriter装饰,从而使用其中的readLine方法
2.实例
InputStream inputStream = System.in; InputStreamReader reader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(reader); 简化BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));4) 输出字节流向输出字符流转换
1.转换原因:可以设置编码
2.实例
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(“asd.txt”)), ”UTF-8”)5)读操作
1. 使用InputStream或Reader的read()来读取单个字节(字符)
1> 因为返回的是int类型,所以如果读取的是字符,还需要进行强制转换
2> 如果读到文件末尾,返回的是-1
3> 实例
FileReader fileReader = null;try{fileReader = new FileReader("mm.txt");int ch = 0;while((ch=fileReader.read()) != -1)System.out.println((char)ch);2. 使用InputStream或Reader的read(byte[])(或read(char[]))来读取流中内容到数组中
1> 一般设置数组的长度是1024的倍数
2> 此时read的返回值是读到的字节(或字符)数
3>读到文件末尾,返回的也是-1
fileReader = new FileReader("mm.txt"); char[] cbuf = new char[1024]; int num; while((num=fileReader.read(cbuf)) != -1) { System.out.println(new String(cbuf,0,num)); }3. 使用BufferedReader来提高读取效率
1> 特有方法:readLine,读取一行数据,如果没有则返回空
2>实例:
FileReader fileReader = null; BufferedReader bufferedReader = null; try { fileReader = new FileReader("mm.txt"); bufferedReader = new BufferedReader(fileReader); String line = null; while((line=bufferedReader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } finally { try { if(bufferedReader != null) bufferedReader.close(); } catch (IOException e){ e.printStackTrace();} }
3>注意:关闭BufferedReader、BufferedWriter会连Reader、Writer对象一起关闭,所以只用关闭Buffered对象即可
6)写操作
1. 使用OutputStream或Writer的write()来写入单个字节(字符)
1> 因为传入的是int类型,所以如果写入的是字符,还需要进行强制转换
2> 实例
File f = new File("e:"+File.separator+"test.txt"); FileOutputStream fos = null; try { fos = new FileOutputStream(f); fos.write(58); }2. 使用OutputStream或Writer的write(byte[])(或write(char[]))来将数组中内容写入到流中
1> 一般设置数组的长度是1024的倍数
2> 实例
File f = new File("e:"+File.separator+"test.txt"); FileOutputStream fos = null; fos = new FileOutputStream(f); byte[] content = new byte[2048]; fos.write(content);3. 使用BufferedWriter来提高写入效率
1> 特有方法:write(String str),可以和BufferedReader的readLine方法配合使用
2>实例:
FileWriter fileWriter = null; BufferedWriter bufferedWriter = null; try {<pre name="code" class="java"> fileWriter = new FileWriter("mm.txt",true);bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write("hao gaoxing a"); }
3>注意:关闭BufferedReader、BufferedWriter会连Reader、Writer对象一起关闭,所以只用关闭Buffered对象即可
4.注意:
如果直接使用
fileWriter = new FileWriter("mm.txt");表示如果文件里面有内容则会删除,然后再向文件里面写
如果使用
fileWriter = new FileWriter("mm.txt",true);表示如果文件中有内容,则在原来内容后面续写 7)异常处理
1. 因为肯定要执行close操作,所以推荐将close写在finally中,这样既可以保证流被关闭,又可以防止被关闭两次
2. 因为close也可能会抛出异常,所以在finally中对close操作也要try、catch
3.实例
FileWriter fileWriter = null; BufferedWriter bufferedWriter = null; try { fileWriter = new FileWriter("mm.txt",true); bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write("hao gaoxing a"); } catch (IOException e) { e.printStackTrace(); } finally { try { if(bufferedWriter != null) bufferedWriter.close(); } catch (IOException e) { e.printStackTrace(); } }
8)常用操作
1.文本文件复制
BufferedReader bufferedReader = null; BufferedWriter bufferedWriter = null; try { bufferedReader = new BufferedReader(new FileReader("mm.txt")); bufferedWriter = new BufferedWriter(new FileWriter("gg.txt")); String line = null; while((line=bufferedReader.readLine()) != null) { bufferedWriter.write(line); bufferedWriter.newLine();//必须要加上 } } catch (IOException e) { e.printStackTrace(); } finally { try { if(bufferedReader != null) bufferedReader.close(); } catch (IOException e) { new RuntimeException(" reader close error"); } try { if(bufferedWriter != null) bufferedWriter.close(); } catch (IOException e) { new RuntimeException("writer close error"); } }
- IO
- IO
- io
- IO
- io
- IO
- io
- IO
- IO
- IO
- io
- IO
- IO
- IO
- IO
- IO
- IO
- IO
- Cocos2d-x jsb + Cocos2d-html5 跨平台游戏开发(二)—— 遇到的坑
- Pentest Lab - flick
- Hadoop RPC 源码阅读1
- Android开发资源推荐第2季
- HDU 1394(线段树单点更新)
- IO
- iOS 使用AVAudioPlayer开发录音功能
- UVA10120 - Gift?!
- 广义表
- 双缓存显示问题以及图片
- 详解 QT 中Graphics View柜架(上篇)
- xcode 安装 svn command line
- 在页面加载的时候自动为日期插件添加当前日期。
- 黑马程序员_程序流程控制