黑马程序员技术交流社区
标题: 【笔记整理】流操作的基本规律 [打印本页]
作者: ywen_chan 时间: 2015-4-29 17:57
标题: 【笔记整理】流操作的基本规律
读取键盘的录入:
System.out:对应的是标准的输出设备,控制台
System.in:对应的而是标准的输入设备,键盘输入
例子:
- import java.io.*;
- class ReadIn
- {
- pubic static void main(String[] args)
- {
- InputStream in =System.in;
- int by = in.read();//只录入了一个字节;
- System.out.println(by);
-
- }
- }
复制代码 练习:连续录入,当录入一行数据之后会,就将该行数据进行打印。如果录入的数据是over
,那么停止录入。- imprt java.io.*;
- class ReadIn
- {
- public statc void main(String[] args)
- {
- InputStream in =System.in;
- StringBuilder sb =new StringBuilder();
- while(ture)
- {
- 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());
- sb.delete(0,sb.length()); //清空缓冲区
- }
- else
- sb.append((char)ch);
- }
- }
- }
复制代码 读取转换流:字节转字符- imprt java.io.*;
- classTransStreamDemo
- {
- public statc void main(String[] args) throws IOException
- {
- InputStream in =System.in;
- InputStreamReader isr=new InputStreamReader(in);
- BufferedReader buff =new BufferedReader(isr);
- String line=null;
- whie((line=buff.readline())!=null)
- {
- if(“over”.equals(line))
- break;
- System.out.println(line.toUppercase());
- }
- bufr.close();
- }
- }
复制代码 写入转换流:字符转字节;OutputStreamWriter
- OutStream out=System.out;
- OutputStreamWriter osw=new OutputStreamWriter(out);
- BufferedWriter bufw=new BufferedWriter(osw);
- String line =null;
- while (line=bufr.readline()!=null)
- {
- if(“over”.equals(line))
- break;
- //osw.write(line.toUpperCase());
- //osw.flush();//字符流是带缓冲区,所以要刷新
- bufw.write(line.toUpperCase());
- bufw.newLine();
- bufw.flush();
- }
- bufr.close();
复制代码 以上可以转换成两句搞定:牢记,规律--键盘录入: BufferedReader bufr = newBufferedReader(new InputStreamReader(System.in));
--控制台输出: BufferedWriter buwr = newBufferedWriter (new OutputStreamWriter(System.out));
如要将键盘录入的信息写入到文件当中,那么只需修改一下就得了
BufferedWriterbuwr = newBufferedWriter (new FileOutputStream(“out.txt”));
若要将一个文件的数据打印在控制台上,那么修改一下就行了
BufferedReaderbufr = newBufferedReader(new FileInputStream(“CopyPic.java”));
流操作的基本规律:
最痛苦的是流对象很多,不知道该用哪一个;通过三个明确来完成,
1、 明确源和目的
源:输入流InputStream 、Reader;目的:输出流OutputStream、Writer
2、 明确操作的数据是否是纯文本
是:用字符流;否:字节流
3、 当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分:源设备包括内存,硬盘,键盘;目的设备有内存、硬盘,控制台
需求1、将一个文本文件中的数据存储到另一个文件中,即复制文件
分析:源是文本文件,所以使用读取流,InputStream、Reader
是不是操作文本文件,是就选择Reader。
接下来明确设备:为硬盘上面的一个文件
那么Reader体系中可以操作文件的对象是FileReader
是否需要提高效率,是就需要加入Reader体系中的缓冲区BufferedReader
目的:OutputStream Writer
是否是纯文本,是就选择Writer,设备是硬盘,一个文件,那么采用Writer体系中可以操作文件的对象FileWriter。是否需要提高效率,是就需要加入Writer体系中的缓冲区BufferedWriter
需求2、将键盘录入的数据存储在一个文件中:
源:InputStream、Reaer
是不是纯文本?是,采用Reader体系
设备:键盘(字节流)。对应的对象时Syetem.in
那么这不是应该选择Reader吗?System.in对应的不是字节流吗?为了操作键盘的文本数据方便,键盘录入应转换成字符串操作是最方便的。所以既然明确了Reader,那么久将System.in转换成字符流,那么用到了Reader体系中的转换流,InputStreamReader
代码规范如下:
InputStreamReader Isr= new InputStreamReader(System.in);
需要提高效率吗?需要!BufferedReader
那么BufferedReader bufr=new BufferedReader(isr);
目的: OutputStream Writer
是否是存纯文本?是!采用Writer体系
设备:硬盘。一个文件,那么采用FileWriter
那么:FileWriter fw =new FileWriter(“c.txt”);
需要提高效率吗?需要!那么BufferedWriter bufr =new BufferWriter(fw);
4、 扩展:想要把录入的数据按照指定的编码表(UTF-8)存在文件中。
目的: OutputStream Writer
是否是存纯文本?是!采用Writer体系
设备:硬盘。一个文件,那么采用FileWriter,但是FileWriter是使用默认的编码表GBK
但是存储是,需要加入指定的编码表(UTF-8),而指定的编码表只有转换流可以指定,所以要使用的对象是OutputStreamWriter,而该转换流对象要接收一个字节输出流,而且还可以操作文件的字节输出流。FileOutStream
代码:OutputStreamWriter asw =
newOutputSteramWriter(new FileOututStream(“d.txt”),”UTF-8”)
需要提高效率吗?需要!那么BufferedWriter bufr =new BufferWriter(osw);
所以,记住,转换流什么时候使用,转换流是字符与字节之间的桥梁,通常涉及到字符编码转换是,需要用到转换流。
作者: 海带 时间: 2015-4-29 20:42
不错 赞一个
作者: 罗韬 时间: 2015-4-29 21:28
不错,分享一个
作者: 黄文昭 时间: 2015-4-29 22:25
很好的分享!
作者: ywen_chan 时间: 2015-4-29 23:22
多谢支持
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |