package demo.io;
import java.io.*;
/**
* 转换流:
* InputStreamReader :字节到字符的桥梁。解码。
* OutputStreamWriter:字符到字节的桥梁。编码。
* <p>
* // 流的操作规律:
* 1,明确源和目的(汇)
* 源:InputStream Reader
* 目的:OutputStream Writer
* <p>
* 2,明确数据是否是纯文本数据。
* 源:是纯文本:Reader
* 否:InputStream
* 目的:是纯文本 Writer
* 否:OutputStream
* <p>
* 到这里,就可以明确需求中具体要使用哪个体系。
* <p>
* 3,明确具体的设备。
* 源设备:
* 硬盘:File
* 键盘:System.in
* 内存:数组
* 网络:Socket流
* <p>
* 目的设备:
* 硬盘:File
* 控制台:System.out
* 内存:数组
* 网络:Socket流
* <p>
* 4,是否需要其他额外功能。
* 1,是否需要高效(缓冲区);
* 是,就加上buffer.
* 2,转换。
*/
class 标准输入输出流System重定向 {
public static void main(String[] args) throws IOException {
// toUpperCaseDemo();//键盘录入一行字符转大写
// changeReader();//字节流转换为字符流的简单演示
// printUpperCase();//将键盘输入的字符变成大写在控制台输出
// writeFile();//将键盘输入数据写入文件
// readFile();//将文本内容显示在控制台或者某文件中
changeStream();//改变“标准”输入输出流
}
//改变“标准”输入输出流
private static void changeStream() throws IOException {
// System.setIn(new FileInputStream("后期设备的配置文件.properties"));//改变输入流
// System.setOut(new PrintStream("后期设备的配置文件.properties"));//改变输出流
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while ((line = bufr.readLine()) != null) {
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufr.close();
bufw.close();
}
//将文本内容显示在控制台上
private static void readFile() throws IOException {
BufferedReader bufr = new BufferedReader(new FileReader("cc.txt"));
// BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));//把cc.txt内容写入控制台
BufferedWriter bufw = new BufferedWriter(new FileWriter("后期设备的配置文件.properties"));//把cc.txt内容写入aa.txt
String line = null;
while ((line = bufr.readLine()) != null) {
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufr.close();
bufw.close();
}
//将键盘输入数据写入文件
private static void writeFile() throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter("cc.txt"));
String line = null;
while ((line = bufr.readLine()) != null) {
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufr.close();
bufw.close();
}
//将键盘输入的字符变成大写在控制台输出
private static void printUpperCase() throws IOException {
/*
InputStream in = System.in;//创建字节流对象: “标准”输入流
InputStreamReader isr = new InputStreamReader(in);//将字节流转换为字符流
BufferedReader bufr = new BufferedReader(isr);//将字符流对象被缓冲区字符流装饰
OutputStream out = System.out;//创建字节流对象: “标准”输出流。(控制台)
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw);*/
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while ((line = bufr.readLine()) != null) {
if ("over".equals(line)) {
break;
} else {
// osw.write(line.toUpperCase() + '\n');
// osw.flush();
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
bufr.close();
bufw.close();
}
//字节流转换为字符流的简单演示
private static void changeReader() throws IOException {
InputStream in = System.in;
InputStreamReader isr = new InputStreamReader(in);//将字节流转换为字符流
BufferedReader bufr = new BufferedReader(isr);//将字符流对象被缓冲区字符流装饰
String line = null;
while ((line = bufr.readLine()) != null) {
if ("over".equals(line)) {
break;
} else {
System.out.println(line.toUpperCase());
}
}
}
//键盘录入字符转大写
private static void toUpperCaseDemo() throws IOException {
InputStream in = System.in;
int ch = 0;
/*while ((ch = in.read()) != -1) {//^D结束 简单键盘录入
System.out.println(ch);
}*/
StringBuilder sb = new StringBuilder();//储存一行字符的缓冲区
while ((ch = in.read()) != -1) {
if (ch == '\n') {//此行输入结束
String temp = sb.toString();
if ("over".equals(temp)) {//此行输入over终止
break;
} else {
System.out.println(temp.toUpperCase());//输出此行字符的大写形式
sb.delete(0, sb.length());//清空缓冲区
}
} else {//此行输入未结束,也就是未输入回车
sb.append((char) ch);
}
}
}
}