【黑马程序员】----Java 基础之 IO流__字符流
2015-04-09 09:46
176 查看
Java中的IO流,在平时也是很常用的一个类,IO流包括四个基类,InputStream,OutputStream,Reader,Writer,前两个为字节流的读写操作类,后两个是字符流的读写操作类,字符流的出现可以有效解决数据在读写过程中的编码转换问题。
下面根据毕老师的讲解,从不同角度总结IO的使用方法:
一、Reader && Writer
1、FileWriter,从字面上可以看出,这个是Writer的一个子类,看下具体用法
上一种文件的写入方式很直观且很便捷,但是有一个很明显的问题就是,如果文件已经存在,它会暴力的覆盖掉原内容,这时就引入了另外一个问题,文件的追加读写。仔细看FileWriter的构造函数,可以添加一个参数,是否在末尾进行数据追加,那么就简单了:
3.1 FileReader , 字符读取的便捷类,先将上次写好的文件内容读取出来
read(byte[] bt); 这种方法是将数据读取到byte[]数组中,返回的读取到的字符个数,读取到末尾时返回 -1 .
case: 将D盘下的一个txt文件copy到E盘下。
原理: 先读取D盘下的文件,然后再写入到E盘,使用FileReader、FileWriter
提高效率之 字符流缓冲区。 缓冲区的出现是为了提高流的操作效率的,因此在创建缓冲区之前必须先有流对象。
1、BufferedWriter 的用法
2、BufferedReader的用法
注意点: 缓冲区一定要关闭,可以在finally代码块中进行关闭,也要进行非空判断
下面根据毕老师的讲解,从不同角度总结IO的使用方法:
一、Reader && Writer
1、FileWriter,从字面上可以看出,这个是Writer的一个子类,看下具体用法
<span style="white-space:pre"> </span>//先引用 FileWriter fw = null; try { //再实例化,数据IO流,肯定需要制定操作的数据,写文件,肯定也要制定待操作的文件 //注意,如果指定的文件已存在,该方法会覆盖源文件内容 fw = new FileWriter("E:\\test.txt"); fw.write("黑马程序员"); } catch (IOException e) { e.printStackTrace(); }finally{ //使用完IO流,一定记得要关闭,所以放在finally代码块中处理 try { //此处值得注意的是,如果fw在实例化的过程中出错,如硬盘未找到,则实例化会失败,fw对象为null //此处再执行close时会空指针异常,所以要先进行判断 if(fw != null){ fw.close(); } } catch (IOException e) { e.printStackTrace(); } } //结果: 在E盘下创建了test.txt文件,文件内容为“黑马程序员”2、文件的追加读写
上一种文件的写入方式很直观且很便捷,但是有一个很明显的问题就是,如果文件已经存在,它会暴力的覆盖掉原内容,这时就引入了另外一个问题,文件的追加读写。仔细看FileWriter的构造函数,可以添加一个参数,是否在末尾进行数据追加,那么就简单了:
//其他步骤不变,仅添加true参数 fw = new FileWriter("E:\\test.txt",true); fw.write(",我来了"); //结果: test.txt文件未被覆盖,末尾追加了,我来了3、文件的读取
3.1 FileReader , 字符读取的便捷类,先将上次写好的文件内容读取出来
FileReader fr = null; try { //创建文件读取流对象,并制定文件路径,需要确保文件存在,否则会抛文件不存在异常 fr = new FileReader("E:\\test.txt"); int r = 0; //注意read(),每次只读取一个字符,且是依次读取,当读到末尾时返回-1 while((r=fr.read()) != -1){ System.out.print((char)r); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(fr != null){ fr.close(); } } catch (IOException e) { e.printStackTrace(); } }3.2 通过字符数组读取
read(byte[] bt); 这种方法是将数据读取到byte[]数组中,返回的读取到的字符个数,读取到末尾时返回 -1 .
case: 将D盘下的一个txt文件copy到E盘下。
原理: 先读取D盘下的文件,然后再写入到E盘,使用FileReader、FileWriter
//创建Reader FileReader fr = null; //创建Writer FileWriter fw = null; try { fr = new FileReader("E:\\test.txt"); fw = new FileWriter("E:\\test1.txt"); //先读取文件,存储在内存中,然后再写入文件,可以提高效率 char[] buffer = new char[1024]; int len = 0; //读取到的长度 while((len = fr.read(buffer)) != -1){ fw.write(buffer,0,len); } } 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(); } } }二、BufferedWriter && BufferedReader
提高效率之 字符流缓冲区。 缓冲区的出现是为了提高流的操作效率的,因此在创建缓冲区之前必须先有流对象。
1、BufferedWriter 的用法
try { //创建写入流 FileWriter fw = new FileWriter("E:\\test2.txt"); //创建缓冲区,将写入流作为参数传入即可 BufferedWriter bfw = new BufferedWriter(fw); bfw.write("你好,黑马"); //用到缓冲区,就要刷新 bfw.flush(); //关闭缓冲区就关闭了流 bfw.close(); } catch (IOException e) { e.printStackTrace(); }注意点: 在循环写数据时,最好写一次flush一次; 跨平台换行符 newLine();
2、BufferedReader的用法
try { //创建读写流 FileReader fr = new FileReader("E:\\test2.txt"); //创建缓冲区 BufferedReader br = new BufferedReader(fr); String back = ""; //readLine会读取一行,读取到数据末尾时返回null while((back = br.readLine()) != null){ System.out.println(back); } br.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
注意点: 缓冲区一定要关闭,可以在finally代码块中进行关闭,也要进行非空判断
相关文章推荐
- 黑马程序员java 基础之io流中的字符流
- 黑马程序员——Java基础——IO流、字符流、字节流、缓冲区技术、装饰设计模式、LineNumberReader等
- 黑马程序员——Java基础---IO流(字符流)
- 黑马程序员——Java基础------IO流之字符流、字节流和缓冲区。
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员--Java基础学习笔记【IO流-字符流】
- 黑马程序员-JAVA基础-IO流之字符流和字符流缓冲区
- 黑马程序员--Java基础学习之IO流之字节流、字符流、读取写入文件、Copy文件、键盘输入输出、流操作的基本规律
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员—java基础_IO流—字符流
- 黑马程序员——Java基础---IO流概述、字符流、字节流、流操作规律
- 黑马程序员——Java基础---IO流(字符流、字节流、转换流、流操作规律)
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律 (黑马程序员)
- 黑马程序员_Java基础_其它对象和IO流(字符流)
- 黑马程序员_Java基础_IO流(字符流缓冲区和字节流相关操作以及相关操作技巧)
- 黑马程序员——Java基础IO流概述、字符流、字节流、流操作规律、File类、Properties类、打印流、序列流
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员——JAVA基础------IO流(三)----字符流
- 黑马程序员——Java基础——IO流(上)之字符流