前两篇降了IO流中的字节流和字符流复制的例子,今天来总结一下IO流的规律
掌握好IO流的规律,再开发中会很好用
下面来总结一下:
1,明确源和目的
源:输入流 InputStream 和Reader
目的:输出流 OutputStream 和Writer
2,操作的数据是否是纯文本。
是:使用字符流
不是:使用字节流
3,当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分
源设备: 内存,硬盘,键盘
目的设备: 内存,硬盘,控制台
这里的源就是你想进行的操作,比如说你想从c盘复制一个文件到d盘,那么C磁盘中要操作的文件就是源,如果是文本文件的话,那么源就可以用字符流。如果是图片,MP3
文件等那么源就是字节流,再举个例子,比如说你要读取键盘录入,那么这是你是不是要读取键盘错做的字符啊,这是你就应该想到是用输入流,读取嘛
下面贴出一个键盘录入的例子
分析:
读取键盘录入:
System.out:对应单的是标准的输出设备,控制台。
Syste.in:对应的标准输入设备:键盘,
需求:
通过键盘录入数据,
当录入一行数据后,就将该行数据进行打印。
如果录入的数据时over。那么将停止录入
这里的源就是我刚说的键盘,目的呢,是控制台,既然源是键盘,那么就要用到输入流,相反目的就是输出流
import java.io.*;//这里我导入了io所有的包
class ReadDemo
{
public static void main(String[] args)throws IOException
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch==‘\r‘)
continue;
if(ch==‘\n‘)
{
String s=sb.toString();
if("over".equals(s))
break;
System.out.println(s);
sb.delete(0,sb.length());
}
else
sb.append((char)ch);
}
}
}
扩展一下,想要把录入的数据按照指定的编码表(UTF-8),讲数据保存到文件中
目的:OutPurStream Writer
是否是纯文本 是 Writer
设备:硬盘 一个文件,使用FileWriter
但是FileWriter是使用默认编码表GBK
但是存储时需要加入指定的编码表,utf-8,而指定的编码表只有转换流可以指定
所以要使用的对象时OutPurStreamWriter
而该转换流对象接受一个字节输出流,而且还可以操作的文件的字节输出流FIleOutPutStream
OutputStreamWriter osw = new OutPutSreamWriter(new FileOutputStream("d.txt"),"utf-8");
需要高效吗,需要那么就需要建立缓冲区
BufferWriter bufw =new BufferWriter(osw);
所以,记住转换流什么使用,字符和字节之间的桥梁,通常涉及到字符编码转换时需要用到转换流
import java.io.*;
class Demo
{
public static void main(String[] args)throws IOException
{
//获取键盘录入对象
InputStream in =System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作使用BufferedReader
BufferedReader bufr=new BufferedReader(isr);
String line=null;
while((line=bufr.readLine())!=null)//读取
{
if("over".equals(line))
break;
System.out.println(line);
}
bufr.close();//关闭流
}
}