读取键盘的录入: 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); 所以,记住,转换流什么时候使用,转换流是字符与字节之间的桥梁,通常涉及到字符编码转换是,需要用到转换流。
|