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

 

posted @ 2012-11-21 16:55  积小流,成江海  阅读(159)  评论(0编辑  收藏  举报