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 { 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(); } } }
时间: 2024-10-14 01:26:01