IO流 改变标准输入输出设备

package com.yyq;
import java.io.*;
/*
 * 转换流--------指定码表
 * 需求: 想将一个文件的数据打印在控制台上
 * 源:文件
 * 目的:控制台
 * 流操作的基本规律:
 *     最痛苦的就是流的对象有很多,不知道该用哪一个
 *     
 *     三个明确来完成: (1)明确 源和目的
 *                         源: 输入流  (InputStream Reader) 
 *                       目的:输出流(OutputStream Writer)
 *                 (2)明确操作的数据是否是纯文本
 *                          是纯文本: 字符流
 *                      不是纯文本:字节流
 *                 (3)当体系明确后,再明确要使用那个具体的对象
                        设备进行区分:
 *                         源设备:内存,硬盘,键盘
 *                         内存,硬件,控制台
 *                 是否需要提高效率: 是,需要加入Reader体系中的缓冲区
 *   1.将一个文本文件中的数据存储到 另一个文件中,复制文件
 *       源:InputStream Reader 
 *        是文本文件,这是就可以选择Reader
 *        体系明确
 *        接下来要明确要使用该体系中的那个对象,明确设备: 硬盘上的一个文件
 *        Reader体系中可以操作文件的对象是FileReader              
 *     目的:OutputStream Writer
 *           目的是否是纯文本 writer
 *      设备: 硬盘,一个文件
 *        writer 体系中可以操作文件的对象FileWriter
 *      (循环读写,定义缓冲区)
 */
/*
 * 2.将键盘录入的数据保存到一个文件中
 *   源: InputStrem Reader
 *   是不是纯文本:(键盘是纯文本 ? 是 Reader)
 *   设备:键盘(对应的对象是 System.in )
 *   不是选择Reader吗 ?System.in对应的是不是字节流吗?
 *   为了操作键盘的文本数据方便,转成字符流,按照字符串操作是最方便的
 *   所以既然明确了Reader ,那么就将system.in 转换成Reader
 *   用了Reader体系中的转换流 InputStreamReader
 *       需要提高效率吗? 需要的话使用BufferedReader
 *   目的: OutputStream Writer
 *   是否是纯文本? 是字符流writer
 *   设备:硬盘一个文件: 使用FileWriter
 *   需要提高效率吗? BufferedWriter
 *   ********************************
 *   
 *   扩展:想要把录入的数据按照指定的编码表(utf8),将数据存入到文件中
 *   转换流的由来就是可以指定编码表,(转换流存在的意义,就是能指定编码表)
 *   但是存储是,需要加入指定的编码表,而指定的编码表只有转换流可以指定
 *   该流对象需要接收一个字节输出流,而且还可以操作文件的字节输出流FileOutputStream
 * 
 *   转换流: 什么时候使用? 字符和字节之间的桥梁,通常涉及字符编码转换时使用到
 */
public class Test {
    public static void main(String[] args) throws IOException {
        System.setOut(new PrintStream("haha.txt"));
        BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("1.txt"),"gbk"));
        System.out.println(bufr.readLine());
        BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
        String line = null;
        while((line = bufr.readLine())!=null){
            bufw.write(line);
            bufw.newLine();
            bufw.flush();
        }
    }
}
原文地址:https://www.cnblogs.com/yangyongqian/p/5153524.html