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);