loading黑马程序员之IO字符流(2-1)
2013-12-29 10:27
246 查看
-------android培训 、java培训、期待与您交流!
----------
Java IO流根据分类方式不同有4个基类:Reader(字符输入流),Writer(字符输出流),inputSream(字节输入流),outputStream(字节输出流)。
java.io.Reader、java.io.Writer与其子类等是处理字符流(Character Stream)的相关类。
简单地说,就是对流数据以一个字符(两个字节)的长度为单位来处理,并进行适当的字符编码转换处理,即Reader、Writer与其子类可以用于进行所谓纯文本文件的字符读/写
先来一个对字符流基本的输入输出操作。
然后,简单写一个模拟BufferedReader的readLine()和close()方法的类,加深对buffer封装流的理解
-------android培训 、java培训、期待与您交流!
----------
----------
Java IO流根据分类方式不同有4个基类:Reader(字符输入流),Writer(字符输出流),inputSream(字节输入流),outputStream(字节输出流)。
java.io.Reader、java.io.Writer与其子类等是处理字符流(Character Stream)的相关类。
简单地说,就是对流数据以一个字符(两个字节)的长度为单位来处理,并进行适当的字符编码转换处理,即Reader、Writer与其子类可以用于进行所谓纯文本文件的字符读/写
先来一个对字符流基本的输入输出操作。
package com.heima.io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * 功能:复制文本文件 */ public class ReadAndWriteTextFileDemo { public static void main(String[] args) { // 基于当前目录 File sourceFile = new File("1.txt"); File targetFile = new File("2.txt"); FileReader fr = null; FileWriter fw = null; BufferedReader br = null; BufferedWriter bw = null; try { fr = new FileReader(sourceFile); // 创建一个文件,如果文件存在则覆盖,追加模式不覆盖 // new RandomAccessFile("1.txt", "rdw").seek(100)也可实现追加 fw = new FileWriter(targetFile); // 对流进行封装,实现缓冲。 // 把读取的数据缓冲到一个临时空间,然后一起写,提高了效率 br = new BufferedReader(fr); bw = new BufferedWriter(fw); String line = null; while ((line = br.readLine()) != null) { // 字符流要先转换成字节流,输出到缓冲区,文件实际上并没有进入目的地。 // 字节流就不需要flush,直接写到目的地。 bw.write(line); // BufferedWriter不会把换行写入文件,所以要手动换行 bw.newLine(); // 及时刷新缓冲区数据 // 防止发生断电等意外导致缓存区数据没有刷新到目的地,但是耗资源 bw.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { // 流应该一个一个的关,防止发生异常后,后面的流没有关闭 // buffer的关闭实际上就是关闭了buffer封装的reader或writer流 // 所以reader或writer流不用再关闭 // 这也是可以用reader或writer作为匿名内部类的原因 try { if (br != null) br.close(); } catch (IOException e) { e.printStackTrace(); } try { if (bw != null) bw.close(); } catch (IOException e) { e.printStackTrace(); } } } }
然后,简单写一个模拟BufferedReader的readLine()和close()方法的类,加深对buffer封装流的理解
package com.heima.io; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; /** * 功能:简单模拟BufferedReader的readLine()和close()方法 * * 问题:myReadLine()方法如果遇到某一行没有数据,就不会往下读了。 这是个问题,小弟暂时不知道怎么做,如果你知道,请告诉我 */ public class MyBufferedReaderDemo { public static void main(String[] args) { MyBufferedReader mbr = null; BufferedWriter bw = null; try { mbr = new MyBufferedReader(new FileReader("1.txt")); bw = new BufferedWriter(new FileWriter("2.txt")); String line = null; while ((line = mbr.myReadLine()) != null) { bw.write(line); bw.newLine(); bw.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (mbr != null) mbr.myClose(); } catch (Exception e) { e.printStackTrace(); } try { if (bw != null) bw.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 自定义缓存读取类 */ static class MyBufferedReader { private Reader reader = null; public MyBufferedReader(Reader reader) { this.reader = reader; } public String myReadLine() throws IOException { // StringBuilder(线程不安全) 与Stringbuffer的区别: // 参考:http://blog.csdn.net/rmn190/article/details/1492013 StringBuilder sb = new StringBuilder(); int ch = 0; while ((ch = reader.read()) != -1) { // window的换行符是\r\n,linux是\n // 读到换行的第一个字符\r,不再写数据,继续读 if (ch == '\r') continue; // 读到换行的第二个字符\n,不再读数据,返回已经读取的数据 if (ch == '\n') break; // 读取字符 else sb.append((char) ch); } if (sb.length() > 0) return sb.toString(); else return null; } /** * Buffered关闭的实际上就是流 所以,关闭了Buffere就不用再关闭流 */ public void myClose() throws IOException { reader.close(); } } }
-------android培训 、java培训、期待与您交流!
----------
相关文章推荐
- loading黑马程序员之IO键盘输入(2-3)
- 黑马程序员——第18天——IO输入与输出(概述,字符流)
- 『黑马程序员』---java--IO--字符流缓冲区
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员 IO 字符流中 的读取 和 写入
- 黑马程序员-IO字节流的基础应用。。整个IO的分析(字符流和字节流的选择,转换)
- 黑马程序员_IO(字符流和字节流)
- 黑马程序员_递归、IO-字符流笔记
- 黑马程序员_IO_字符流
- 黑马程序员--IO(字符流、字节流)
- 黑马程序员_温习 IO流一 (个人笔记) 简要(IO介绍。。字符流。。字符流缓冲区..装饰设计模式)
- 黑马程序员——java基础---IO---字符流
- loading黑马程序员之IO一些流操作(2-5)
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员---IO--常用基类字符流抽象类中的中的FileWriter FileReader的使用
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员------IO字符流笔记
- 黑马程序员________Java中IO技术字节流字符流的应用及File类学习笔记
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律 (黑马程序员)
- 黑马程序员——java的IO之字符流,字节流,转换流