------- android培训、java培训、期待与您交流!-------

  在操作IO流时,常常会迷惑:流对象很多,不知道该使用哪一个?

一.流操作的基本规律:

  通过三个明确来完成:

  1、明确‘源’和‘目的’。

    源:则使用输入流;InputStream 或者 Reader 。

    目的:则使用用输出流;OutputStream 或者 Writer 。

  2、操作的数据是否是纯文本。

    是纯文本:则使用字符流。

    不是纯文本:则使用字节流。

  3、当体系明确后,再明确要使用哪个具体的对象,通过设备来进行区分。

    源设备:内存,硬盘,键盘。

    目的设备:内存,硬盘,控制台。

  当完成以上三个明确,这可以很清楚的选择使用适应的流对象。

二.读写流转换:

  例子:将键盘录入的数据保存到一个文件中。

  首先:明确该处的源可以使用:InputStream或者Reader ;目的:使用OutputStream 或 Writer。

  其次:数据是不是纯文本? 是,则使用Reader 和 Writer。

  最后:源->设备:键盘。对应的对象是System.in ; 目的-> 设备:硬盘。一个文件则使用FileWriter。

import java.io.*;
public class TransStreamDemo2 {public static void main(String[] args) throws IOException {
//        键盘录入:BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in) );
//        输出方式:BufferedWriter bufw =new BufferedWriter( new FileWriter("D:\\TransStreamDemo2.txt") ) ;String line = null ; while((line = bufr.readLine()) != null) {
//            当遇到 "over" 则停止录入。if ("over".equals(line))break ; bufw.write(line) ; bufw.newLine() ; }bufw.close() ; bufr.close() ;}
}

  因为: public static final InputStream in “标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。在这里我们可以知道 System.in 对应的是字节流,而我们使用的Reader 则是字符流,所以应该将System.in 转换成字符流。

InputStreamReader isr = new InputStreamReader(System.in) ;

  通过上面的例子,可以知道字节流转换成字符流则可以使用 InputStreamReader 类构造方法,而将字符流转换成字节流则可以使用 OutputStreamWriter 类构造方法。

三.改变标准输入输出设备:

  系统默认的标准输入和输出:

    System.out 标准的输出设备,控制台。

    System.in 标准的输入设备,键盘。

  改变标准输入输出设备则可以使用System 类中的两个方法:

    static void setIn( InputStream in) 重新分配“标准”输入流。

    static void setOut(PrintStream out  ) 重新分配“标准”输出流。

  例子:改变异常信息存储方式: 异常处理日志信息。

  需求:将程序报错的错误信息存储到文本。

 1 public class ExceptionInfo {
 2     public static void main(String[] args) throws IOException {
 3         try {
 4             int[] num = new int[2] ;
 5             System.out.println(num[3]) ;
 6         }
 7         catch(Exception e) {
 8             try {
 9 //                增加时间:
10                 Date d = new Date() ;
11                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ") ;
12                 String s = sdf.format(d) ;
13 //                改变标准输出流。
14                 PrintStream ps = new PrintStream("D:\\exception.log") ;
15                 ps.println(s) ;
16                 System.setOut(ps);
17             }
18             catch(IOException ex) {
19
20             }
21             e.printStackTrace(System.out) ;
22         }
23     }
24 }

黑马程序员-JAVA基础-IO流之流操作规律及读写转换流相关推荐

  1. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

  2. 黑马程序员——Java基础--IO流(一)---File类以及其他流对象

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.File类 File类是将文件系统中的文件和文件夹封装成了对象.提供了更多的属性和行为可以对 ...

  3. 黑马程序员-JAVA基础-IO流之字符流和字符流缓冲区

    ------- android培训.java培训.期待与您交流!------- Java 的IO 流 是实现输入和输出的基础,Java 中把不同的输入.输出源抽象表述为"流" (S ...

  4. 黑马程序员-----Java基础-----IO流-3

    -----<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...

  5. 黑马程序员-JAVA基础-IO流中的装饰设计模式

    ------- android培训.java培训.期待与您交流!------- 装饰设计模式: 当想要对已有的对象进行功能增强时,可以定义类,将已有的对象传入,基于已有的功能,并提供加强功能.那么,自 ...

  6. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  7. 黑马程序员---java基础-Java之IO

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.概念 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Jav ...

  8. 黑马程序员-java基础8--IO流(一)

    ------- android培训.java培训.期待与您交流! ---------- @@day(18)IO字符流之FileWriter.FileReader******************** ...

  9. 黑马程序员--Java基础加强篇

    开发工具使用 --------------------------------------------------------------------------------------------- ...

最新文章

  1. 艾伟也谈项目管理,IT项目管理的六种错误思维
  2. 取一个字符串中的数字
  3. Python应用实战-从pandas的角度来对比MySQL,教你如何更快更好的学习sql
  4. Fiddler抓包一键生成调用代码
  5. 从减少DNS查找来优化网站
  6. 四维的王坚和三维的阿里互联网汽车
  7. Windows server常见操作、问题
  8. 3.指定IP地址抓包
  9. opencv用python进行物体识别_教你用Python+opencv来识别物体的轮廓并标识显示
  10. ElasticSearch学习笔记(二)
  11. linux 报警级别,linux PMBus总线驱动设计分析
  12. 新手python的100个实战项目-实例分享 | 4个Python实战项目(一)
  13. logistic regression(二项 logistic 与 多项logistic )
  14. 2022 年牛客多校第五场补题记录
  15. 动态密码算法介绍与实现
  16. [转]高精度乘法计算
  17. Lock wait timeout exceeded; try restarting transaction
  18. GMS(Google Mobile Service)
  19. vue实现搜索功能的代码/实现搜索的程序
  20. 5V降压3.3V电路设计PW2058

热门文章

  1. su如何变成实体_不用建模就能生成地形,SU怎么办到的?
  2. LeetCode-笔记-394. 字符串解码
  3. js字符串的字典序_JavaScript通过字典进行字符串翻译转换的方法
  4. html前端开发是什么,web前端开发需要会什么
  5. 监控系统 Prometheus 和 Zabbix 对比
  6. 安装计算机过程中的注意事项,西门子step7安装过程中的注意事项
  7. python爬虫换电脑不能运行_python爬虫程序运行失败,求原因
  8. api1.7oracle,API 支持
  9. 必须为元素类型 association 声明属性 oftype。_CSS相关的选择器和属性介绍
  10. gdal java shp_【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)