黑马程序员_IO流使用规律
2013-05-03 18:04
204 查看
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
Java的IO流体系中有很多的流对象,在实际编程时到底该如何确定使用那一个呢?
可以根据以下规律进行选择(三个明确):
1、明确源和目的:
源:输入流。用InputStream、或Reader体系;
目的:输出流。用OutputStream、或Writer体系;
2、明确数据是否是纯文本:
是:用字符流;
否:用字节流;
3、明确设备:
源设备:文件、内存、键盘等。据此选择具体的输入流对象;
目的设备:文件、内存、控制台等;据此选择具体的输出流对象。
通过前两个"明确"已经可以确定使用哪个体系,之后再根据第三个"明确"很容易确定使用哪个具体的流对象。(之后还可以根据是否需要提高效率,选择是否用对应的Buffered***类进行装饰。)
示例1:
需求:将一个文本文件的数据存储到另一个文件中,即复制文件。
分析:此需求中源和目的都存在,分别进行分析如下:
对于源-->有InputStream、Reader体系可选;
数据是纯文本-->选择Reader体系;
源设备是文件-->选择FileReader类;
----------------------------------------------
对于目的-->有OutputStream、Writer体系可选;
数据是纯文本-->选择Writer体系;
目的设备是文件-->选择FileWriter。
代码:(下面的代码会将当前文件夹下的TestJava.java文件复制到C盘下的copy.txt文件中)
示例2:
需求:将键盘录入的内容保存到文件中。
分析:此需求中源和目的都存在,分别进行分析如下:
对于源-->有InputStream、Reader体系可选;
数据是纯文本-->选择Reader体系;
源设备是键盘-->选择System.in类;但此类是字节流,不属于Reader体系,
为此想到要使用转换流,使用InputStreamReader类;
----------------------------------------------
对于目的-->有OutputStream、Writer体系可选;
数据是纯文本-->选择Writer体系;
目的设备是文件-->选择FileWriter。
代码:
示例3:
需求:对示例2进行扩展,将键盘录入按照指定编码(UTF-8)保存到文件中。
分析:"源"部分跟示例2相同,仍使用InputStreamReader;
对于目的,因为要指定编码表,因此不能再使用FileWriter(该类使用的是系统默认编码),
而要使用OutputStreamWriter(内部封装FileOutputStream),因为此类在进行构造时可以
指定编码方式。
代码:
Java的IO流体系中有很多的流对象,在实际编程时到底该如何确定使用那一个呢?
可以根据以下规律进行选择(三个明确):
1、明确源和目的:
源:输入流。用InputStream、或Reader体系;
目的:输出流。用OutputStream、或Writer体系;
2、明确数据是否是纯文本:
是:用字符流;
否:用字节流;
3、明确设备:
源设备:文件、内存、键盘等。据此选择具体的输入流对象;
目的设备:文件、内存、控制台等;据此选择具体的输出流对象。
通过前两个"明确"已经可以确定使用哪个体系,之后再根据第三个"明确"很容易确定使用哪个具体的流对象。(之后还可以根据是否需要提高效率,选择是否用对应的Buffered***类进行装饰。)
示例1:
需求:将一个文本文件的数据存储到另一个文件中,即复制文件。
分析:此需求中源和目的都存在,分别进行分析如下:
对于源-->有InputStream、Reader体系可选;
数据是纯文本-->选择Reader体系;
源设备是文件-->选择FileReader类;
----------------------------------------------
对于目的-->有OutputStream、Writer体系可选;
数据是纯文本-->选择Writer体系;
目的设备是文件-->选择FileWriter。
代码:(下面的代码会将当前文件夹下的TestJava.java文件复制到C盘下的copy.txt文件中)
import java.io.*; public class IODemo{ public static void main(String[] args){ BufferedReader br=null; BufferedWriter bw=null; try{ //源:FileReader。用BufferedReader进行装饰,以提高效率。 br=new BufferedReader(new FileReader("TestJava.java")); //目的:FileWriter。用BufferedWriter进行装饰,以提高效率。 bw=new BufferedWriter(new FileWriter("E:\\copy.txt")); //进行读写操作 String line=null; while((line=br.readLine())!=null){ bw.write(line); bw.newLine();//换行 bw.flush();//将数据从缓冲区中刷到目的文件中 } }catch(IOException e){ System.out.println("复制失败"); }finally{ try{ if(br!=null) br.close(); if(bw!=null) bw.close(); }catch(IOException e){ System.out.println("关闭流失败"); } } } }
示例2:
需求:将键盘录入的内容保存到文件中。
分析:此需求中源和目的都存在,分别进行分析如下:
对于源-->有InputStream、Reader体系可选;
数据是纯文本-->选择Reader体系;
源设备是键盘-->选择System.in类;但此类是字节流,不属于Reader体系,
为此想到要使用转换流,使用InputStreamReader类;
----------------------------------------------
对于目的-->有OutputStream、Writer体系可选;
数据是纯文本-->选择Writer体系;
目的设备是文件-->选择FileWriter。
代码:
import java.io.*; public class IODemo{ public static void main(String[] args){ BufferedReader br=null; BufferedWriter bw=null; try{ //源:System.in、InputStreamReader。用BufferedReader进行装饰,以提高效率。 br=new BufferedReader(new InputStreamReader(System.in)); //目的:FileWriter。用BufferedWriter进行装饰,以提高效率。 bw=new BufferedWriter(new FileWriter("E:\\save.txt")); //进行读写操作 String line=null; while((line=br.readLine())!=null){ if(line.equals("over"))//定义结束标签 break; bw.write(line); bw.newLine();//换行 bw.flush();//将数据从缓冲区中刷到目的文件中 } }catch(IOException e){ System.out.println("保存数据失败"); }finally{ try{ if(br!=null) br.close(); if(bw!=null) bw.close(); }catch(IOException e){ System.out.println("关闭流失败"); } } } }
示例3:
需求:对示例2进行扩展,将键盘录入按照指定编码(UTF-8)保存到文件中。
分析:"源"部分跟示例2相同,仍使用InputStreamReader;
对于目的,因为要指定编码表,因此不能再使用FileWriter(该类使用的是系统默认编码),
而要使用OutputStreamWriter(内部封装FileOutputStream),因为此类在进行构造时可以
指定编码方式。
代码:
import java.io.*; public class IODemo{ public static void main(String[] args){ BufferedReader br=null; BufferedWriter bw=null; try{ //源:System.in、InputStreamReader。用BufferedReader进行装饰,以提高效率。 br=new BufferedReader(new InputStreamReader(System.in)); //目的:OutputStreamWriter、FileOutputStream。 //用BufferedWriter进行装饰,以提高效率。 bw=new BufferedWriter(new OutputStreamWriter (new FileOutputStream("E:\\save.txt"),"UTF-8")); //进行读写操作 String line=null; while((line=br.readLine())!=null){ if(line.equals("over"))//定义结束标签 break; bw.write(line); bw.newLine();//换行 bw.flush();//将数据从缓冲区中刷到目的文件中 } }catch(IOException e){ System.out.println("保存数据失败"); }finally{ try{ if(br!=null) br.close(); if(bw!=null) bw.close(); }catch(IOException e){ System.out.println("关闭流失败"); } } } }
相关文章推荐
- 黑马程序员_Java基础_IO流_字节流,字节流操作文件,缓冲区字节流,流的使用规律,异常记录原理
- 黑马程序员————IO流操作的基本规律和使用方法
- 黑马程序员------IO流使用
- 黑马程序员——Java基础——IO流笔记(PrintWriter使用示例)
- “黑马程序员”java_IO流之PipedInputStream管道流的使用
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律 (黑马程序员)
- 黑马程序员——Java基础——IO流笔记(BufferedReader使用示例)
- 黑马程序员——Java基础——IO流笔记(PrintStream使用示例)
- java提高篇(一)拓展篇 java知识汇总---IO流的使用规律总结(含代码示例)浅显易懂
- 黑马程序员——Java基础——IO流笔记(InputStreamReader和OutputStreamWriter使用示例)
- 黑马程序员——Java基础——IO流笔记(BufferedWriter使用示例)
- 黑马程序员——Java基础——IO流笔记(PipedInputStream和PipedOutputStream使用示例)
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员————小牛皮糖学习笔记————IO流之未使用缓冲区读写文件
- 黑马程序员——>第十九天<io流(BufferedWriter-装饰设计模式-流操作规律)>
- 黑马程序员——Java基础——IO流笔记(FileReader使用示例)
- 黑马程序员——Java基础——IO流笔记(SequenceInputStream使用示例)
- 黑马程序员——Java基础---IO流概述、字符流、字节流、流操作规律
- 黑马程序员——Java基础——IO流笔记(ObjectInputStream和ObjectOutputStrem使用示例)
- 黑马程序员——java-IO流中复制单击目录以及使用递归的方式复制多级目录小结