java基础--IO流概述
IO流概述
从这篇blog开始介绍IO技术,本篇文章首先做个引子,简单介绍了IO流的概念,书写注意事项,流操作基本规律,
以及通过IO流中的 日志信息的输出和系统信息的获取
一、文件的基本读取方式,字节流字符流
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流与字符流
流按流向分为:输入流、输出流
IO流常用基类
InputStream、OutputStream
字符流的抽象基类:
Reader、Writer
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀
二、IO程序的书写注意事项
导入IO包中的类
进行IO异常处理
在finally中对流进行关闭
IO流读取文件格式示例
import java.io.*; class FileWriterDemo { public static void main(String[] args) throws IOException { //创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件, //而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。 //其实该步就是在明确数据要存放的目的地 FileWriter fw = new FileWriter("demo.txt"); //传递一个true参数,代表不覆盖已有的文件,并在已有文件的末尾处进行数据续写。 //FileWriter fw = new FileWriter("demo.txt",true); //调用write方法,将字符串写入到流中。 fw.write("abcde"); //刷新流对象中的缓冲中的数据。 //将数据刷到目的地中。 //fw.flush(); //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。 //将数据刷到目的地中。 //和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。 fw.close(); } }
三、IO异常的处理方式
import java.io.*; class FileWriterDemo2 { public static void main(String[] args) { FileWriter fw = null;//fw要定义为成员变量,才可以被各个代码块使用 try { fw = new FileWriter("demo.txt"); fw.write("abcdefg"); } catch (IOException e) { System.out.println("catch:"+e.toString()); } finally//一定要执行流关闭动作,当有多个流需要关闭时需要依次判断 { try { if(fw!=null)//文件创建失败fw会为空,所以要进行判断 fw.close(); } catch (IOException e) { System.out.println(e.toString()); } } } }
四、流操作规律
通过三个明确来完成。
1> 明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer。
2>操作的数据是否是纯文本。
是:字符流, Reader Writer 不是:字节流,InputStream, OutputStream
3>当体系明确后,再明确要使用哪个具体的对象。
通过设备来进行区分:
源设备 :内存 ByteArrayStream,硬盘 FileReader、FileInputStream , 键盘 System.in
目的设备:内存 ByteArrayStream,硬盘 FileWriter、 FileOutputStream, 控制台 System.out
4>是否需要提高效率,加入Reader体系中的缓冲区
BufferedReader BufferedInputStream
BufferedWriter BufferedOutputStream
练习:根据上述步骤进行分析
需求:将键盘录入的数据保存到一个文件中。
这个需求中有源和目的都存在,分开思考
1源:InputStream 、Reader
1> 键盘录入是不是纯文本?是!Reader
2> 设备:键盘。对应的对象是System.in.
不是选择Reader吗?而System.in对应的是字节流
为了操作键盘的文本数据方便,转成字符流按照字符串操作是最方便的。
所以既然明确了Reader,那么就将System.in转换成Reader。
3> 用了Reader体系中转换流,InputStreamReader,并为了提高效率,所以:
BufferedReader bufr = new BufferedReader(newInputStreamReader(System.in));
2 目的:OutputStream Writer
1> 是否是纯文本?是!Writer。
2> 设备:硬盘,一个文件,使用FileWriter。
FileWriter fw = new FileWriter("c.txt");
3> 需要提高效率吗?需要。
BufferedWriter bufw = new BufferedWriter(fw);