<<<I、O概述及字符流基本操作>>>

一、概述 :               
 
Java中对文件的操作是以流的方式进行的。流是Java内存中的一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中形成流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同分.

 

二、流的分类 :

              

Java对流的分类比较丰富,刚接触的人看了后会感觉很晕。流分类的方式很多:
 
 
1、 按照输入的方向分, (已内存而言)   从外设将数组输入流和输出流,输入输出的参照对象是Java程序.
2、按照处理数据的单位不同分,字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 16bit).
3、按照功能的不同分,分节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流,FileInputStream是一个接点流,可以直接从文件读取数据,但是BufferedInputStream可以包装 FileInputStream,使得其有缓冲功能.
4、其实还有一些流 :比如:对象流、缓冲流、压缩流、文件流等等!其实都是节点流和处理流的子分类,当然你也可以创建新的流类型,只要你需要.

 

 

三、I、O流的关系 :
 
 
 
不管流的分类是多么的丰富和复杂,其根源来自于四个基本的类。这个四个类的关系如下:
 
字节流    输入流  InputStream  输出流  OutputStream

字符流    输入流    Reader    输出流    Writer !!!
 
字符流的由来:就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字,在对这个文字进行操作.简单说:字节流+编码表!!

I、O流的特点 : 这些体系的子类都以父类名作为后缀,而且子类名的前缀就是该对象的功能!!!

 

 


四、流的细节 : 

 

创建一个可以往文件中写入字符数据的字符输出流对象,既然是在一个文件中写入文字数据,那么在创建对象时,就必须明确该文件.
 FileWriter构造函数中有一个是指定要写入数据的文件,比如FileWriter("Demo.txt"),如果文件不存在,则会自动创建.如果文件存在,则会被覆盖..

如果需要在指定的文件进行续写,可以在构造函数中加入true,可以实现对文件进行续写!FileWriter("Demo.txt",true),
****  其实数据是写入到临时存储缓冲区中,要想使数据写到文件中,需要刷新"flush()该方法是将数据写到目的地中"!!! 
****  我们在操作I、O流时,会自动调用Windows底层资源,所以我们在操作流之后要关闭资源."close();该方法在关闭资源前会先调用flush()"
 
 
创建读取字符数据的流对象,在创建读取流对象时,必须要明确被读取的文件,一定要确定该文件是存在的,用一个读取流关联一个已存在文件. 
比如 : FileReader("demo.txt");  构造函数中可以指定一个文件来读取. 
*****    注意一下: 字符流在读取文件数据时是依据 "-1"的出现来判断读取到结尾..

 

五、代码演示:

创建一个可以往文件中写入字符数据的字符输出流对象

	public static void main(String[] args) throws IOException {

		//创建一个可以往文件中写入字符数据的字符输出流对象。
		/*
		 * 既然是往一个文件中写入文字数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地)。
		 * 
		 * 如果文件不存在,则会自动创建。
		 * 如果文件存在,则会被覆盖。
		 * 
		 * 如果构造函数中加入true,可以实现对文件进行续写!
		 */
		FileWriter fw = new FileWriter("demo.txt",true);
		
		/*
		 * 调用Writer对象中的write(string)方法,写入数据。 
		 * 
		 * 其实数据写入到临时存储缓冲区中。
		 * 
		 */
		fw.write("abcde"+LINE_SEPARATOR+"hahaha");
		
		/*
		 * 进行刷新,将数据直接写到目的地中。
		 */
		
		fw.flush();
		
		/*
		 * 关闭流,关闭资源。在关闭前会先调用flush刷新缓冲中的数据到目的地。
		 */
		fw.close();	
	}

读取一个文本文件。将读取到的字符打印到控制台.

	public static void main(String[] args) throws IOException {

		FileReader fr = new FileReader("demo.txt");
		
		/*
		 * 使用read(char[])读取文本文件数据。
		 * 先创建字符数组。
		 */
		char[] buf = new char[1024];
		
		int len = 0;
		
		while((len=fr.read(buf))!=-1){
			System.out.println(new String(buf,0,len));
		}
		fr.close();
	}

读取一个文本文件。将读取到的字符打印到控制台.

	public static void main(String[] args) throws IOException {

		
		//1,创建读取字符数据的流对象。
		/*
		 * 在创建读取流对象时,必须要明确被读取的文件。一定要确定该文件是存在的。 
		 * 用一个读取流关联一个已存在文件。 
		 */
		FileReader fr = new FileReader("demo.txt");
		
		int ch = 0;
		
		while((ch=fr.read())!=-1){
			System.out.println((char)ch);
		}	
		fr.close();
	}

*****I、O操作都会涉及Windows底层资源,所以会出现异常,标准的处理异常格式是:

                FileWriter fw = null;
		try{
			fw = new FileWriter("Test.txt");
			fw.write("text");
		}
		catch (IOException e){
			System.out.println(e.toString());
		}
		finally{
			If(fw!=null)

			try{
				fw.close();
			}
			catch (IOException e){
				System.out.println(e.toString());

			}			
		}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值