/*
* 1:源:键盘录用
* 目的:控制台
* 2:需求:想把键盘录入的数据存储到一个文件中。
* 源:键盘
* 目的:文件;
* 3:需求:想要将一个文件的数据打印到控制台上
* 源:文件
* 目的:控制台
* 流操作的基本规律:
* 最痛苦的就是流对象有很多,不知道该用那一个;
* 通过两个明确来完成;
* 1:明确源和目的;
* 源:为输入流;InputStream;Reader
* 目的:输出流OutputStream;Writer
* 2:操作的数据是否为纯文本
* 是:用字符流
* 不是:用字节流
* 3:当体系明确后,再明确要使用那个具体的对象
* 通过设备来进行区分
* 源设备:内存,硬盘,键盘
* 目的设备;内存,硬盘,控制台
* 第一个需求:将一个文件中的数据存储到另一个文件中,复制文件
* 源:因为是源所以使用读取流。InputStream;Reader
* 是不是操作文本文件。
* 是:选择Reader,这样就体系就明确了
* 接下来就明确使用该用那个体系中的那个对象
* 明确设备:硬盘上的一个文件
* Reader体系中可以操作文件的对象是FileReader
* 是否需要提高效率:是:加入Reader体系中的缓冲区BufferedReader
* FileReader fr=new FileReader("a.txt");
* BufferedReader bufr=new BufferedReader(fr);
* 目的:OutputStream
* 是否为纯文本?
* 是:Writer
* 设备:硬盘中的一个文件
* Writer体系中可以操作文件的对象是FileWriter
* 是否需要提高效率:是:加入Writer体系中的缓冲区BufferedWriter
* FileWriter fw=new FileWriter(b.txt);
* BufferedWriter bufw=new BufferedWriter(fw);
* 练习:将一个图片文件中数据存储到另一个文件中。复制文件,
* 要求按照以上格式自己完成三个明确
* ---------------------------------------------------------------------------------------
* 2:需求:将键盘录入的数据保存到一个文件中
* 这个需求中有源和目的都存在
* 那么分别分析
* 源:InputStream;Reader
* 是不是纯文本?是!Reader
* 设备:键盘。对应的对象 为 system.in
* 不是选择Reader么?system.in对应的不是字节流么?
* 为了操作键盘的文本数据方便,转成字符流按照字符串操作是最方便的
* 所以既然明确了Reader,那么就将system.in转换成Reader
* 用了Reader体系中的转换流InputStreamReader
* 代码:InputStreamReader isr=newInputStreamReader(system.in);
* 需要提高效率?需要:BufferedReader;
* BufferedReader bufr=new BufferedReader(isr);
* 目的OutputStream Writer;
* 是否为纯文本?是,Writer
* 设备:硬盘,一个文本,使用FileWriter
* FileWriter fw=new FileWriter(“c.txt”);
* 需要提高效率么?需要;
* BufferedWriter bufw=new BufferedWriter(fw);
* 扩展一下,想要吧录入数据按照指定的编码表utf-8,将数据存到文件中
* 设备:硬盘,一个文本,使用FileWriter
* 但是存储时,需要加入指定编码表utf-8,而指定的编码表只有转换流可以指定
* 所以要使用的对象是OutputStreamWriter,而该转换对象要接收一个字节输出流
* 而且还可以操作的文件的字节输出流FileOutputStream
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("d.txt"),"utf-8");
* 需要提高效率么?需要;
* BufferedWriter bufw=new BufferedWriter(osw);
* 记住;转换流什么时候使用,字符和字节之间的桥梁通常涉及到字符编码转换时需要用到转换流
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
/*
* 读取键盘录入。
* system.out :对应的标准的输出设备,控制台
* system.in:对应的标准输入设备,键盘
* 需求:通过键盘录入数据。当录入一行数据后就将改行数据进行打印
* 如果录入是数据是over,那么停止录入。(ctrl+c就是结束语句)
*/
public class ReaderIn {
public static void main(String[] args) {
InputStream in=System.in;
// int ch=0;
StringBuilder sb=new StringBuilder();
//使用字符流转换成字节流方法进行录用
//将字节流对象转换转换成字符流,使用转换流。InputStreamReader
// InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader
// BufferedReader bufr=new BufferedReader(isr);
try {//把源变成一个文件
// System.setIn(new FileInputStream("d:\\2.txt"));
//目的改为一个文件
System.setOut(new PrintStream("d:\\zz.txt"));
//如果源和文件都是一个文件,那么运行结果就是复制的过程
} catch (FileNotFoundException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out ));
/*
//以上三句话合并为一句话书写;项目一的程序
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//项目3的程序
try {
BufferedReader bufr2=new BufferedReader(new InputStreamReader(new FileInputStream("d:\\2.txt")));
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
//键盘录入最常见写法
//以下三句话合并为一句话书写;项目一的程序
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out ));
//项目二的程序
try {
BufferedWriter bufw2=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\out.txt") ));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}*/
//对应为输出语句
/*OutputStream out=System.out;
OutputStreamWriter osw=new OutputStreamWriter(out );
BufferedWriter bufw=new BufferedWriter(osw);*/
String line=null;
try {
while ((line=bufr.readLine())!=null) {
if ("over".equals(line)) {
break;
}
// osw.write(line.toUpperCase());
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
//System.out.println(line.toUpperCase());
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
bufr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/*while (true ) {
try {
int ch=in.read();
if (ch=='\r') {
continue;
}if (ch=='\n') {
String s=sb.toString();
if ("over".equals(s)) {
break;
}
System.out.println(s.toUpperCase());
}else {
sb.append((char)ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}*/
/*try {//录一个输出一个
while ((ch=in.read())!=-1) {
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}*/
/*try {
//键盘录入
int by=in.read();
System.out.println(by);
} catch (IOException e) {
e.printStackTrace();
}*/
}
}